[FIX] database connections aren't serialized by default
lp bug: https://launchpad.net/bugs/314449 fixed bzr revid: christophe@taupe-20090131183618-pglu86hzq3ewsfxi
This commit is contained in:
parent
27240361ca
commit
9c721d3090
|
@ -69,9 +69,9 @@ class db(netsvc.Service):
|
|||
self.actions[id] = {'clean': False}
|
||||
|
||||
db = sql_db.db_connect('template1')
|
||||
cr = db.cursor()
|
||||
cr = db.serialized_cursor()
|
||||
try:
|
||||
cr.autocommit(True)
|
||||
cr.autocommit(True) # XXX inhibit the effect of a serialized cursor. is it what we want ?
|
||||
cr.execute('CREATE DATABASE "%s" ENCODING \'unicode\'' % db_name)
|
||||
finally:
|
||||
cr.close()
|
||||
|
@ -149,8 +149,8 @@ class db(netsvc.Service):
|
|||
logger = netsvc.Logger()
|
||||
|
||||
db = sql_db.db_connect('template1')
|
||||
cr = db.cursor()
|
||||
cr.autocommit(True)
|
||||
cr = db.serialized_cursor()
|
||||
cr.autocommit(True) # XXX inhibit the effect of a serialized cursor. is it what we want ?
|
||||
try:
|
||||
try:
|
||||
cr.execute('DROP DATABASE "%s"' % db_name)
|
||||
|
@ -201,8 +201,8 @@ class db(netsvc.Service):
|
|||
raise Exception, "Database already exists"
|
||||
|
||||
db = sql_db.db_connect('template1')
|
||||
cr = db.cursor()
|
||||
cr.autocommit(True)
|
||||
cr = db.serialized_cursor()
|
||||
cr.autocommit(True) # XXX inhibit the effect of a serialized cursor. is it what we want ?
|
||||
try:
|
||||
cr.execute("""CREATE DATABASE "%s" ENCODING 'unicode' TEMPLATE 'template0'""" % db_name)
|
||||
finally:
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
##############################################################################
|
||||
|
||||
import netsvc
|
||||
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT, ISOLATION_LEVEL_SERIALIZABLE
|
||||
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT, ISOLATION_LEVEL_READ_COMMITTED, ISOLATION_LEVEL_SERIALIZABLE
|
||||
from psycopg2.pool import ThreadedConnectionPool
|
||||
from psycopg2.psycopg1 import cursor as psycopg1cursor
|
||||
|
||||
|
@ -76,8 +76,9 @@ class Cursor(object):
|
|||
return f(self, *args, **kwargs)
|
||||
return wrapper
|
||||
|
||||
def __init__(self, pool):
|
||||
def __init__(self, pool, serialized=False):
|
||||
self._pool = pool
|
||||
self._serialized = serialized
|
||||
self._cnx = pool.getconn()
|
||||
self._obj = self._cnx.cursor(cursor_factory=psycopg1cursor)
|
||||
self.autocommit(False)
|
||||
|
@ -168,7 +169,8 @@ class Cursor(object):
|
|||
|
||||
@check
|
||||
def autocommit(self, on):
|
||||
self._cnx.set_isolation_level([ISOLATION_LEVEL_SERIALIZABLE, ISOLATION_LEVEL_AUTOCOMMIT][bool(on)])
|
||||
offlevel = [ISOLATION_LEVEL_READ_COMMITTED, ISOLATION_LEVEL_SERIALIZABLE][bool(self._serialized)]
|
||||
self._cnx.set_isolation_level([offlevel, ISOLATION_LEVEL_AUTOCOMMIT][bool(on)])
|
||||
|
||||
@check
|
||||
def commit(self):
|
||||
|
@ -190,6 +192,9 @@ class ConnectionPool(object):
|
|||
def cursor(self):
|
||||
return Cursor(self)
|
||||
|
||||
def serialized_cursor(self):
|
||||
return Cursor(self, True)
|
||||
|
||||
def __getattr__(self, name):
|
||||
return getattr(self._pool, name)
|
||||
|
||||
|
|
Loading…
Reference in New Issue