fix: merge_delay_run 偶尔会出现 (2006, MySQL server has gone away 的报错)

pull/13084/head
Bai 2024-04-19 04:37:03 +08:00 committed by Bryan
parent c0273dc698
commit 660572a0ea
2 changed files with 16 additions and 2 deletions

View File

@ -1,6 +1,6 @@
from contextlib import contextmanager
from django.db import connections
from django.db import connections, transaction
from django.utils.encoding import force_str
from common.utils import get_logger, signer, crypto
@ -58,6 +58,17 @@ def safe_db_connection():
close_old_connections()
@contextmanager
def open_db_connection(alias='default'):
connection = transaction.get_connection(alias)
try:
connection.connect()
with transaction.atomic():
yield connection
finally:
connection.close()
class Encryptor:
def __init__(self, value):
self.value = force_str(value)

View File

@ -12,6 +12,7 @@ from functools import wraps
from django.db import transaction
from .utils import logger
from .db.utils import open_db_connection
def on_transaction_commit(func):
@ -146,7 +147,9 @@ ignore_err_exceptions = (
def _run_func_with_org(key, org, func, *args, **kwargs):
from orgs.utils import set_current_org
try:
with transaction.atomic():
with open_db_connection() as conn:
# 保证执行时使用的是新的 connection 数据库连接
# 避免出现 MySQL server has gone away 的情况
set_current_org(org)
func(*args, **kwargs)
except Exception as e: