From b5daffc115f77d02b8e78ab6c437776f9d91e97c Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Wed, 13 Jul 2011 17:35:21 +0200 Subject: [IMP] registry: whene deleting a registry, also delete its cache and cron. bzr revid: vmt@openerp.com-20110713153521-isn9bllnggbxwi0z --- openerp/sql_db.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'openerp/sql_db.py') diff --git a/openerp/sql_db.py b/openerp/sql_db.py index 43a508f9082..37cb8b224bb 100644 --- a/openerp/sql_db.py +++ b/openerp/sql_db.py @@ -429,9 +429,8 @@ def db_connect(db_name): return Connection(_Pool, db_name) def close_db(db_name): - """ You might want to call openerp.netsvc.Agent.cancel(db_name) along this function.""" + """ You might want to call openerp.modules.registry.RegistryManager.delete(db_name) along this function.""" _Pool.close_all(dsn(db_name)) - tools.cache.clean_caches_for_db(db_name) ct = currentThread() if hasattr(ct, 'dbname'): delattr(ct, 'dbname') -- cgit v1.2.3 From ad06d1ba565c61a59403087a3b0751267ae5d76c Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Tue, 13 Sep 2011 16:34:44 +0200 Subject: [FIX] This complements commit 3511, revision-id: odo@openerp.com-20110714105552-9tgofrjtdgjmgc4b. Each OpenERP cursor is mapped to a single psycopg2 connexion. When a cursor is closed, the connexion is pushed back to a pool and reused later. Now that the 'snapshot isolation' level is used, the fact we didn't properly commit/rollback a transaction appears: some 'concurrent' update showed up. The fix is simple: whenever a cursor is closed, we rollback any pending operation (which is the expected behavior). (Furthermore, the connexion is explicitely closed when the connexion is pushed back but not kept in the pool.) bzr revid: vmt@openerp.com-20110913143444-s49r7r2h6m00p5s3 --- openerp/sql_db.py | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'openerp/sql_db.py') diff --git a/openerp/sql_db.py b/openerp/sql_db.py index f4a899c8db2..79606b9101c 100644 --- a/openerp/sql_db.py +++ b/openerp/sql_db.py @@ -294,6 +294,9 @@ class Cursor(object): del self._obj self.__closed = True + # Clean the underlying connection. + self._cnx.rollback() + if leak: self._cnx.leaked = True else: @@ -430,6 +433,7 @@ class ConnectionPool(object): self._debug('Put connection to %r in pool', cnx.dsn) else: self._debug('Forgot connection to %r', cnx.dsn) + cnx.close() break else: raise PoolError('This connection does not below to the pool') -- cgit v1.2.3 From e85f246469d6dbf5c9f801e20babd7d13b2c05f9 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Sat, 24 Sep 2011 03:58:52 +0200 Subject: [IMP] sql_db: auto-exception-logging can now be turned off per cursor, not only per query bzr revid: odo@openerp.com-20110924015852-9vru7cdsmzbvault --- openerp/sql_db.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'openerp/sql_db.py') diff --git a/openerp/sql_db.py b/openerp/sql_db.py index 79606b9101c..8038c39486d 100644 --- a/openerp/sql_db.py +++ b/openerp/sql_db.py @@ -183,6 +183,8 @@ class Cursor(object): self.__caller = False self.__closer = False + self._default_log_exceptions = True + def __del__(self): if not self.__closed: # Oops. 'self' has not been closed explicitly. @@ -199,7 +201,7 @@ class Cursor(object): self._close(True) @check - def execute(self, query, params=None, log_exceptions=True): + def execute(self, query, params=None, log_exceptions=None): if '%d' in query or '%f' in query: self.__logger.warn(query) self.__logger.warn("SQL queries cannot contain %d or %f anymore. " @@ -212,11 +214,11 @@ class Cursor(object): params = params or None res = self._obj.execute(query, params) except psycopg2.ProgrammingError, pe: - if log_exceptions: + if self._default_log_exceptions or log_exceptions: self.__logger.error("Programming error: %s, in query %s", pe, query) raise except Exception: - if log_exceptions: + if self._default_log_exceptions or log_exceptions: self.__logger.exception("bad query: %s", self._obj.query or query) raise -- cgit v1.2.3