Skip to content

Commit 5739201

Browse files
committed
fix for "too many clients" with galaxy tools
1 parent 1362bd0 commit 5739201

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

chado/__init__.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from sqlalchemy.ext.automap import automap_base
2525
from sqlalchemy.ext.declarative import declarative_base
2626
from sqlalchemy.orm import relationship, sessionmaker
27+
from sqlalchemy.pool import NullPool
2728

2829
standard_library.install_aliases()
2930

@@ -34,7 +35,8 @@ class ChadoModel(object):
3435

3536
class ChadoInstance(object):
3637

37-
def __init__(self, dbhost="localhost", dbname="chado", dbuser="chado", dbpass="chado", dbschema="public", dbport=5432, dburl=None, offline=False, no_reflect=False, reflect_tripal_tables=False, **kwargs):
38+
def __init__(self, dbhost="localhost", dbname="chado", dbuser="chado", dbpass="chado", dbschema="public", dbport=5432, dburl=None, offline=False,
39+
no_reflect=False, reflect_tripal_tables=False, pool_connections=True, **kwargs):
3840
self.dbhost = dbhost
3941
self.dbname = dbname
4042
self.dbuser = dbuser
@@ -47,9 +49,17 @@ def __init__(self, dbhost="localhost", dbname="chado", dbuser="chado", dbpass="c
4749
if '@[' in self.dburl:
4850
# the url given by pglite is not in the correct format for sqlalchmemy
4951
self.dburl = re.sub(r"postgres://(.+)@\[(.+)\]/(.+)", r"postgres://\1@/\3?host=\2", self.dburl)
50-
self._engine = create_engine('%s' % (self.dburl))
52+
engine_url = self.dburl
5153
else:
52-
self._engine = create_engine('postgresql://%s:%s@%s:%s/%s' % (self.dbuser, self.dbpass, self.dbhost, self.dbport, self.dbname))
54+
engine_url = 'postgresql://%s:%s@%s:%s/%s' % (self.dbuser, self.dbpass, self.dbhost, self.dbport, self.dbname)
55+
56+
if pool_connections:
57+
self._engine = create_engine(engine_url)
58+
else:
59+
# Prevent SQLAlchemy to make a connection pool.
60+
# Useful for galaxy dynamic options as otherwise it triggers "sorry, too many clients already" errors after a while
61+
self._engine = create_engine(engine_url, poolclass=NullPool)
62+
5363
self._metadata = MetaData(self._engine, schema=self.dbschema)
5464
Session = sessionmaker(bind=self._engine)
5565
self.session = Session()

0 commit comments

Comments
 (0)