diff --git a/app/db_sql.py b/app/db_sql.py index f630a3a..7b34aba 100644 --- a/app/db_sql.py +++ b/app/db_sql.py @@ -16,8 +16,16 @@ db_uri = settings.SQLALCHEMY_DB_URI # log.setLevel(logging.INFO) connection_string = db_uri -engine = create_engine(url=connection_string, poolclass=NullPool, echo=False, isolation_level='READ COMMITTED', connect_args={'connect_timeout': settings.DB['connect_timeout']}) -# engine = create_engine(url=connection_string, pool_size=5, max_overflow=15, pool_recycle=settings.DB['pool_recycle'], pool_pre_ping=True, echo=False, echo_pool=True, isolation_level='READ UNCOMMITTED', connect_args={'connect_timeout': settings.DB['connect_timeout']}) +# engine = create_engine(url=connection_string, poolclass=NullPool, echo=False, isolation_level='READ COMMITTED', connect_args={'connect_timeout': settings.DB['connect_timeout']}) # 2024-10-08 +engine = create_engine( + url=connection_string, + echo=False, + pool_use_lifo=True, + pool_pre_ping=True, + isolation_level='READ COMMITTED', + connect_args={'connect_timeout': settings.DB['connect_timeout']} + ) +# engine = create_engine(url=connection_string, pool_size=5, max_overflow=15, timeout=settings.DB['connect_timeout'], pool_recycle=settings.DB['pool_recycle'], pool_pre_ping=True, echo=False, echo_pool=True, isolation_level='READ UNCOMMITTED', connect_args={'connect_timeout': settings.DB['connect_timeout']}) # NOTE: The default isolation_level is 'REPEATABLE READ'. This can sometimes not show updated data. # NOTE: The "echo" set to True option shows the SQL queries. # NOTE: Switching from READ COMMITTED to READ UNCOMMITTED (or REPEATABLE READ). Testing started 2024-04-23 @@ -64,7 +72,16 @@ def sql_connect( settings.SQLALCHEMY_DB_URI = 'mysql://'+DB['username']+':'+DB['password']+'@'+DB['server']+'/'+DB['name'] log.debug(settings.DB) - new_engine = create_engine(url=settings.SQLALCHEMY_DB_URI, poolclass=NullPool, echo=False, isolation_level='READ UNCOMMITTED', connect_args={'connect_timeout': settings.DB['connect_timeout']}) + # new_engine = create_engine(url=settings.SQLALCHEMY_DB_URI, poolclass=NullPool, echo=False, isolation_level='READ UNCOMMITTED', connect_args={'connect_timeout': settings.DB['connect_timeout']}) + new_engine = create_engine( + url=settings.SQLALCHEMY_DB_URI, + echo=False, + pool_use_lifo=True, + pool_pre_ping=True, + isolation_level='READ COMMITTED', + connect_args={'connect_timeout': settings.DB['connect_timeout']} + ) + # new_engine = create_engine(url=settings.SQLALCHEMY_DB_URI, pool_size=5, max_overflow=15, timeout=settings.DB['connect_timeout'], pool_recycle=settings.DB['pool_recycle'], pool_pre_ping=True, echo=False, echo_pool=True, isolation_level='READ UNCOMMITTED', connect_args={'connect_timeout': settings.DB['connect_timeout']}) # new_engine = create_engine(url=settings.SQLALCHEMY_DB_URI, pool_size=5, max_overflow=15, pool_recycle=settings.DB['pool_recycle'], pool_pre_ping=True, echo=False, echo_pool=True, isolation_level='READ UNCOMMITTED', connect_args={'connect_timeout': settings.DB['connect_timeout']}) current_db.engine = new_engine @@ -1324,7 +1341,7 @@ def redis_lookup_id_random( record_id = None if record_id: - r.setex(key_name, datetime.timedelta(minutes=1), value=record_id) + r.setex(key_name, datetime.timedelta(minutes=minutes), value=record_id) log.info(f'Redis: Entry found for: Key="{key_name}" value="{record_id}" TTL={r.ttl(key_name)} seconds') return int(record_id) diff --git a/app/routers/websockets_redis.py b/app/routers/websockets_redis.py index b77bbfa..fa66fee 100644 --- a/app/routers/websockets_redis.py +++ b/app/routers/websockets_redis.py @@ -104,7 +104,8 @@ async def redis_connector( # WARNING: If the timeout is not defined in the function call to something greater than 0 (the default if not set?) or None, the get_message() method will cause high CPU usage and or just not work. Or at least that specific thread will just hang. This is because the timeout is set to 0. This is not the same as None. # The get_message() method is a blocking method (timeout=None) that waits for a message to be published to the channel. This seems to be a good solution for now. The other option is to set a timeout of something like 1 second or .01 seconds to do other things (like send a heartbeat after each timeout). - message = await r_channel.get_message(ignore_subscribe_messages=True, timeout=None) # Timeout should be None. Other options are something like: 1 second, .1 seconds, or .01 seconds + # message = await r_channel.get_message(ignore_subscribe_messages=True, timeout=None) # Timeout should be None. Other options are something like: 1 second, .1 seconds, or .01 seconds + message = await r_channel.get_message(ignore_subscribe_messages=True, timeout=.1) # Timeout should be None. Other options are something like: 1 second, .1 seconds, or .01 seconds log.debug(f'(Redis Reader) Message received or timeout reached: {message}') if message is not None: log.debug(f'(Redis Reader) Message Received: {message}')