Sfoglia il codice sorgente

Don't close the session. Just rollback and/or close.

Ionel Cristian Mărieș 11 anni fa
parent
commit
5a576ec87e
1 ha cambiato i file con 5 aggiunte e 7 eliminazioni
  1. 5 7
      celery/backends/database/__init__.py

+ 5 - 7
celery/backends/database/__init__.py

@@ -37,7 +37,7 @@ def _sqlalchemy_installed():
     return sqlalchemy
     return sqlalchemy
 _sqlalchemy_installed()
 _sqlalchemy_installed()
 
 
-from sqlalchemy.exc import DatabaseError, OperationalError, ResourceClosedError
+from sqlalchemy.exc import DatabaseError, OperationalError, ResourceClosedError, InvalidRequestError
 from sqlalchemy.orm.exc import StaleDataError
 from sqlalchemy.orm.exc import StaleDataError
 
 
 
 
@@ -45,12 +45,10 @@ from sqlalchemy.orm.exc import StaleDataError
 def session_cleanup(session):
 def session_cleanup(session):
     try:
     try:
         yield
         yield
-    except (DatabaseError, OperationalError, ResourceClosedError, StaleDataError):
+    except Exception:
         session.rollback()
         session.rollback()
-        session.connection().invalidate()
-        session.close()
         raise
         raise
-    else:
+    finally:
         session.close()
         session.close()
 
 
 
 
@@ -63,8 +61,8 @@ def retry(fun):
         for retries in range(max_retries):
         for retries in range(max_retries):
             try:
             try:
                 return fun(*args, **kwargs)
                 return fun(*args, **kwargs)
-            except (DatabaseError, OperationalError, ResourceClosedError, StaleDataError):
-                logger.critical(
+            except (DatabaseError, OperationalError, ResourceClosedError, StaleDataError, InvalidRequestError):
+                logger.warning(
                     "Failed operation %s. Retrying %s more times.",
                     "Failed operation %s. Retrying %s more times.",
                     fun.__name__, max_retries - retries - 1,
                     fun.__name__, max_retries - retries - 1,
                     exc_info=True,
                     exc_info=True,