Merge branch 'fix-sqlalchemy-engine-pool-size' into 'main'

🔧 — Default SQLAlchemy pool size is too low for production

See merge request framasoft/framaspace/argos!5
This commit is contained in:
Alexis Metaireau 2023-11-22 12:20:40 +00:00
commit 243c713cbf
5 changed files with 28 additions and 5 deletions

View file

@ -1,2 +1,4 @@
ARGOS_YAML_FILE = "my-config.yaml"
ARGOS_DATABASE_URL = "postgresql://argos:argos@localhost/argos"
DB_POOL_SIZE = 10
DB_MAX_OVERFLOW = 20

View file

@ -76,7 +76,19 @@ def setup_database(app):
logger.debug(f"Using database URL {settings.database_url}")
if settings.database_url.startswith("sqlite:////tmp"):
logger.warning("Using sqlite in /tmp is not recommended for production")
engine = create_engine(settings.database_url)
extra_settings = {}
if settings.db_pool_size:
extra_settings.set("pool_size", settings.db_pool_size)
if settings.db_max_overflow:
extra_settings.set("max_overflow", settings.db_max_overflow)
max_overflow=settings.db_max_overflow,
engine = create_engine(
settings.database_url,
**extra_settings
)
app.state.SessionLocal = sessionmaker(
autocommit=False, autoflush=False, bind=engine
)

View file

@ -1,6 +1,7 @@
import os
from functools import lru_cache
from os import environ
from typing import Optional
import yaml
from pydantic_settings import BaseSettings, SettingsConfigDict
@ -14,23 +15,30 @@ class Settings(BaseSettings):
app_env: str
database_url: str
yaml_file: str
db_pool_size: Optional[int]
db_max_overflow: Optional[int]
class DevSettings(Settings):
app_env: str = "dev"
database_url: str = "sqlite:////tmp/argos.db"
yaml_file: str = "config.yaml"
db_pool_size: Optional[int] = None
db_max_overflow: Optional[int] = None
class TestSettings(Settings):
app_env: str = "test"
yaml_file: str = "tests/config.yaml"
database_url: str = "sqlite:////tmp/test-argos.db"
db_pool_size: Optional[int] = None
db_max_overflow: Optional[int] = None
class ProdSettings(Settings):
app_env: str = "prod"
pass
db_pool_size: Optional[int] = 10
db_max_overflow: Optional[int] = 20
environments = {

View file

@ -19,7 +19,7 @@ myst_enable_extensions = ["colon_fence"]
templates_path = ["_templates"]
exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
mermaid_params = ['--theme', 'forest']
mermaid_params = ["--theme", "forest"]
html_sidebars = {
"**": [

View file

@ -41,6 +41,7 @@ dev = [
"ipython>=8.16,<9",
"ipdb>=0.13,<0.14",
"sphinx-autobuild",
"ruff==0.1.5,<1"
]
postgres = [
"psycopg2-binary>=2.9,<3",