[PATCH cubicweb] [server] prevent returning closed cursor to the database pool

Philippe Pepiot ph at itsalwaysdns.eu
Wed Apr 1 08:52:00 CEST 2020

# HG changeset patch
# User Philippe Pepiot <ph at itsalwaysdns.eu>
# Date 1585674903 -7200
#      Tue Mar 31 19:15:03 2020 +0200
# Node ID 0c973204033a5910afcddb43e872b4df26b68dd2
# Parent  6eae252361e50b9f9b969bb62a6c4975286d47ca
# Available At https://philpep.org/pub/hg/cubicweb
#              hg pull https://philpep.org/pub/hg/cubicweb -r 0c973204033a
[server] prevent returning closed cursor to the database pool

In since c8c6ad8 init_repository use repo.internal_cnx() instead of
repo.system_source.get_connection() so it use the pool and we should not close
cursors from the pool before returning it back. Otherwise we may have
"connection already closed" error.

This bug only trigger when connection-pool-size = 1. Since we are moving to use
a dynamic pooler we need to get this fixed.
This does not occur with sqlite since the connection wrapper instantiate new
cursor everytime, but this occur with other databases.

diff --git a/cubicweb/server/__init__.py b/cubicweb/server/__init__.py
--- a/cubicweb/server/__init__.py
+++ b/cubicweb/server/__init__.py
@@ -253,7 +253,6 @@ def init_repository(config, interactive=
             print('The following SQL statements failed. You should check your schema.')
             raise Exception('execution of the sql schema failed, you should check your schema')
-        sqlcursor.close()
     with repo.internal_cnx() as cnx:
         # insert entity representing the system source

More information about the cubicweb-devel mailing list