From 9aa2c5fb5c248c40887d664860379dc30bc78fe4 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Mon, 12 Jan 2009 10:40:20 +0100 Subject: [PATCH] [FIX] delete the connection pool to template1 when finished [IMP] sql_db.db_connect does not take the 'serialize' parameter anymore lp bug: https://launchpad.net/bugs/314973 fixed bzr revid: christophe@tinyerp.com-20090112094020-6l1hdgp5oflengl6 --- bin/service/web_services.py | 60 +++++++++++++++++++++---------------- bin/sql_db.py | 3 +- 2 files changed, 37 insertions(+), 26 deletions(-) diff --git a/bin/service/web_services.py b/bin/service/web_services.py index abb19fd1a52..7b4b5c35156 100644 --- a/bin/service/web_services.py +++ b/bin/service/web_services.py @@ -68,12 +68,14 @@ class db(netsvc.Service): self.actions[id] = {'clean': False} - db = sql_db.db_connect('template1', serialize=1) + db = sql_db.db_connect('template1') cr = db.cursor() - cr.autocommit(True) - time.sleep(0.2) - cr.execute('CREATE DATABASE ' + db_name + ' ENCODING \'unicode\'') - cr.close() + try: + cr.autocommit(True) + cr.execute('CREATE DATABASE ' + db_name + ' ENCODING \'unicode\'') + finally: + cr.close() + sql_db.close_db('template1') class DBInitialize(object): def __call__(self, serv, id, db_name, demo, lang, user_password='admin'): try: @@ -146,7 +148,7 @@ class db(netsvc.Service): sql_db.close_db(db_name) logger = netsvc.Logger() - db = sql_db.db_connect('template1', serialize=1) + db = sql_db.db_connect('template1') cr = db.cursor() cr.autocommit(True) try: @@ -161,6 +163,7 @@ class db(netsvc.Service): 'DROP DB: %s' % (db_name)) finally: cr.close() + sql_db.close_db('template1') return True def dump(self, password, db_name): @@ -197,11 +200,14 @@ class db(netsvc.Service): 'RESTORE DB: %s already exists' % (db_name,)) raise Exception, "Database already exists" - db = sql_db.db_connect('template1', serialize=1) + db = sql_db.db_connect('template1') cr = db.cursor() cr.autocommit(True) - cr.execute('CREATE DATABASE ' + db_name + ' ENCODING \'unicode\'') - cr.close() + try: + cr.execute('CREATE DATABASE ' + db_name + ' ENCODING \'unicode\'') + finally: + cr.close() + sql_db.close_db('template1') cmd = ['pg_restore'] if tools.config['db_user']: @@ -240,24 +246,28 @@ class db(netsvc.Service): def list(self): db = sql_db.db_connect('template1') + cr = db.cursor() try: - cr = db.cursor() - db_user = tools.config["db_user"] - if not db_user and os.name == 'posix': - import pwd - db_user = pwd.getpwuid(os.getuid())[0] - if not db_user: - cr.execute("select decode(usename, 'escape') from pg_user where usesysid=(select datdba from pg_database where datname=%s)", (tools.config["db_name"],)) - res = cr.fetchone() - db_user = res and str(res[0]) - if db_user: - cr.execute("select decode(datname, 'escape') from pg_database where datdba=(select usesysid from pg_user where usename=%s) and datname not in ('template0', 'template1', 'postgres')", (db_user,)) - else: - cr.execute("select decode(datname, 'escape') from pg_database where datname not in('template0', 'template1','postgres')") - res = [str(name) for (name,) in cr.fetchall()] + try: + cr = db.cursor() + db_user = tools.config["db_user"] + if not db_user and os.name == 'posix': + import pwd + db_user = pwd.getpwuid(os.getuid())[0] + if not db_user: + cr.execute("select decode(usename, 'escape') from pg_user where usesysid=(select datdba from pg_database where datname=%s)", (tools.config["db_name"],)) + res = cr.fetchone() + db_user = res and str(res[0]) + if db_user: + cr.execute("select decode(datname, 'escape') from pg_database where datdba=(select usesysid from pg_user where usename=%s) and datname not in ('template0', 'template1', 'postgres')", (db_user,)) + else: + cr.execute("select decode(datname, 'escape') from pg_database where datname not in('template0', 'template1','postgres')") + res = [str(name) for (name,) in cr.fetchall()] + except: + res = [] + finally: cr.close() - except: - res = [] + sql_db.close_db('template1') res.sort() return res diff --git a/bin/sql_db.py b/bin/sql_db.py index 49094a438f8..1dbdbbc3611 100644 --- a/bin/sql_db.py +++ b/bin/sql_db.py @@ -221,9 +221,10 @@ class PoolManager(object): logger = netsvc.Logger() logger.notifyChannel('dbpool', netsvc.LOG_INFO, 'Closing all connections to %s' % (db_name,)) cls._pools[db_name].closeall() + print "closeall done" del cls._pools[db_name] -def db_connect(db_name, serialize=0): +def db_connect(db_name): return PoolManager.get(db_name) def close_db(db_name):