From 4b58f0400789cf4c2ed88ba1f2e2a131c6682492 Mon Sep 17 00:00:00 2001
From: Jan Hadrava <had@kam.mff.cuni.cz>
Date: Sun, 21 Mar 2021 10:12:06 +0100
Subject: [PATCH] =?UTF-8?q?sqlalchemy:=20automatick=C3=BD=20reconnect=20po?=
=?UTF-8?q?=20zav=C5=99en=C3=AD=20spojen=C3=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
SQLAlchemy za normálních okolností vyhodí exceptionu při prvním requestu
poté, co jí databáze zavře spojení. I v případě, že se tak stane mezi
requesty, musí si to kód handlovat explicitně. Po restartu postgresu
jinak dostane první request v každém workeru error 500.
SQLAlchemy se o to umí postarat sama jen s optionem:
"pool_pre_ping": True,
Na začátku každé transakce nejprve databázi pingne a při odpojení se
zvládne sama reconnectnout. Když běží databáze na stejném serveru,
nemělo by to přidávat výrazný overhead.
---
etc/config.py.example | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/etc/config.py.example b/etc/config.py.example
index 9fd6fbae..2c5dced4 100644
--- a/etc/config.py.example
+++ b/etc/config.py.example
@@ -3,6 +3,14 @@
SQLALCHEMY_DATABASE_URI = "postgresql:///mo_osmo"
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = False
+SQLALCHEMY_ENGINE_OPTIONS = {
+ # SQLAlchemy neumí bez pingnutí databáze na začátku každé transakce
+ # sama ohandlovat zavření spojení. Po restartu Postgresu bez tohoto
+ # nastavení vydá každý worker jednu 500, než začne fungovat normálně.
+ # Pokud běží databáze na stejném serveru, zapnutí by mělo mít
+ # zanedbatelný overhead.
+ "pool_pre_ping": True,
+ }
# Vytvořte pomocí python3 -c 'import secrets; print(secrets.token_hex(32))'
SECRET_KEY = "FIXME"
--
GitLab