fix(chat): resolve Auto-route failover event-loop freeze (#812)
Root cause: ensure_structured_column() executed a synchronous blocking engine.connect().execute(SELECT information_schema.columns ...) inside the async request path (_build_chat_history / _maybe_compress_history), freezing the uvicorn event loop and hanging all endpoints (~200s, recovered only by docker restart). Fix: - chat_context.py: remove per-request ensure_structured_column() calls; run once idempotently at app startup (main.py lifespan). Use CURRENT_DATABASE() for PostgreSQL compatibility. - main.py: add startup-only ensure_structured_column() hook (try/except). - llm_client.py: trust_env=False + bounded httpx.Timeout/wait_for so broken endpoints fail fast instead of hanging the event loop. - chat_service.py: run media generation in a background daemon thread with its own event loop (_launch_media_task_bg) so SSE end does not cancel image/video tasks (#811); remove TEMP faulthandler diagnostic. Safe-align: persist accumulated live container changes (admin/*, knowledge, market, models, config, observability, mcp_client, platform_knowledge, im_bot_platform, chat_media, capability_registry, requirements) and add workflow_templates. Verified: live failover test (model-006 -> conn-refused) returns in ~1.9s with concurrent login 0.83s/200; event-loop responsiveness restored (sub-second).
This commit is contained in:
1 parent
394a7786e0
commit
a2504bce34
27 files changed
+253
-59
No files matched your search
@@ -109,20 +109,20 @@ def _ensure_table(db):
|
||||
"""确保 im_bot_platform_account 表存在(首次调用时创建)。"""
|
||||
db.execute(text("""
|
||||
CREATE TABLE IF NOT EXISTS im_bot_platform_account (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
id SERIAL PRIMARY KEY,
|
||||
user_id VARCHAR(64) DEFAULT NULL,
|
||||
platform VARCHAR(32) NOT NULL,
|
||||
status VARCHAR(32) DEFAULT 'disconnected',
|
||||
creds MEDIUMTEXT NULL,
|
||||
creds TEXT NULL,
|
||||
send_url VARCHAR(512) NULL,
|
||||
api_base VARCHAR(512) NULL,
|
||||
bot_token VARCHAR(512) NULL,
|
||||
webhook_token VARCHAR(64) NULL,
|
||||
last_error MEDIUMTEXT NULL,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY uk_user_platform (user_id, platform)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
||||
last_error TEXT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE (user_id, platform)
|
||||
)
|
||||
"""))
|
||||
db.commit()
|
||||
|
||||
|
||||
Reference in new issue
Block a user