Spaces:
Runtime error
Runtime error
| from mysql.connector import pooling, Error | |
| import os | |
| import time | |
| # Global pool variable | |
| cnxpool = None | |
| def create_pool(retries=3, delay=2): | |
| """ | |
| Attempt to create the connection pool with retries. | |
| This prevents immediate crash if the DB is not ready yet. | |
| """ | |
| global cnxpool | |
| dbconfig = { | |
| "host": os.getenv("MYSQL_HOST", "localhost"), | |
| "port": int(os.getenv("MYSQL_PORT", 3306)), | |
| "user": os.getenv("MYSQL_USER", "root"), | |
| "password": os.getenv("MYSQL_PASSWORD", ""), | |
| "database": os.getenv("MYSQL_DB", "ragdb") | |
| } | |
| for i in range(retries): | |
| try: | |
| print(f"Attempting to connect to MySQL (Attempt {i+1}/{retries})...") | |
| cnxpool = pooling.MySQLConnectionPool(pool_name="rag_pool", | |
| pool_size=5, | |
| **dbconfig) | |
| # Initialize Tables immediately to verify connection works | |
| conn = cnxpool.get_connection() | |
| cursor = conn.cursor() | |
| cursor.execute(""" | |
| CREATE TABLE IF NOT EXISTS chunks ( | |
| id INT AUTO_INCREMENT PRIMARY KEY, | |
| document VARCHAR(255), | |
| chunk_id INT, | |
| text LONGTEXT, | |
| embedding LONGTEXT | |
| ) | |
| """) | |
| conn.commit() | |
| cursor.close() | |
| conn.close() | |
| print("Database initialized successfully.") | |
| return | |
| except Error as e: | |
| print(f"Database connection failed: {e}") | |
| if i < retries - 1: | |
| time.sleep(delay) | |
| else: | |
| print("Could not connect to database after retries. Proceeding without DB (App will start but DB features will fail).") | |
| cnxpool = None | |
| # Initialize pool on module load (but safely) | |
| create_pool() | |
| def get_db_connection(): | |
| global cnxpool | |
| if cnxpool is None: | |
| # Try one more time? Or just fail. | |
| # Let's try to reconnect if it's None (maybe DB came up later) | |
| create_pool(retries=1, delay=0) | |
| if cnxpool is None: | |
| raise Exception("Database connection is not available. Check MYSQL_* environment variables.") | |
| return cnxpool.get_connection() | |