fix: optimize trigger long running read transactions (#35046)

This commit is contained in:
hj24 2026-04-13 16:22:54 +08:00 committed by hj24
parent 616d4c6fdb
commit b6420ec6de
2 changed files with 16 additions and 10 deletions

View File

@ -1,7 +1,7 @@
import logging
from sqlalchemy import update
from sqlalchemy.orm import Session
from sqlalchemy import select, update
from sqlalchemy.orm import Session, sessionmaker
from configs import dify_config
from core.errors.error import QuotaExceededError
@ -29,14 +29,15 @@ class CreditPoolService:
@classmethod
def get_pool(cls, tenant_id: str, pool_type: str = "trial") -> TenantCreditPool | None:
"""get tenant credit pool"""
return (
db.session.query(TenantCreditPool)
.filter_by(
tenant_id=tenant_id,
pool_type=pool_type,
with sessionmaker(db.engine, expire_on_commit=False).begin() as session:
return session.scalar(
select(TenantCreditPool)
.where(
TenantCreditPool.tenant_id == tenant_id,
TenantCreditPool.pool_type == pool_type,
)
.limit(1)
)
.first()
)
@classmethod
def check_credits_available(

View File

@ -156,7 +156,12 @@ def _execute_workflow_common(
state_owner_user_id=workflow.created_by,
)
# Execute the workflow with the trigger type
# NOTE (hj24)
# Release the transaction before the blocking generate() call,
# otherwise the connection stays "idle in transaction" for hours.
session.commit()
# NOTE END
generator.generate(
app_model=app_model,
workflow=workflow,