[Uludag-commits] r4931 - trunk/pisi/pisi
svn-uludag at uludag.org.tr
svn-uludag at uludag.org.tr
11 Ara 2005 Paz 14:33:16 EET
Author: exa
Date: Sun Dec 11 14:33:15 2005
New Revision: 4931
Modified:
trunk/pisi/pisi/dbshelve.py
trunk/pisi/pisi/lockeddbshelve.py
Log:
* fix: use non-transactional access in read-only mode...
Modified: trunk/pisi/pisi/dbshelve.py
=================================================================
--- trunk/pisi/pisi/dbshelve.py (original)
+++ trunk/pisi/pisi/dbshelve.py Sun Dec 11 14:33:15 2005
@@ -59,13 +59,16 @@
def txn_proc(self, proc, txn):
# can be used to txn protect a method automatically
if not txn:
- autotxn = self.dbenv.txn_begin()
- try:
- retval = proc(autotxn)
- except db.DBError, e:
- autotxn.abort()
- raise e
- autotxn.commit()
+ if self.dbenv:
+ autotxn = self.dbenv.txn_begin()
+ try:
+ retval = proc(autotxn)
+ except db.DBError, e:
+ autotxn.abort()
+ raise e
+ autotxn.commit()
+ else: # execute without transactions
+ proc(None)
return retval
else:
return proc(txn)
@@ -96,26 +99,16 @@
return len(self.db)
def __getitem__(self, key):
- txn = self.dbenv.txn_begin()
- try:
+ def proc(txn):
data = self.db.get(key)
- except db.DBError, e:
- txn.abort()
- raise e
- txn.commit()
- return cPickle.loads(data)
+ return cPickle.loads(data)
+ return self.txn_proc(proc, txn)
def __setitem__(self, key, value):
# hyperdandik transactions
- txn = self.dbenv.txn_begin()
- data = cPickle.dumps(value, self.binary)
- try:
+ def proc(txn):
self.db.put(key,data,txn)
- #print 'put', value
- except db.DBError, e:
- txn.abort()
- raise e
- txn.commit()
+ return self.txn_proc(proc, txn)
def __delitem__(self, key):
txn = self.dbenv.txn_begin()
Modified: trunk/pisi/pisi/lockeddbshelve.py
=================================================================
--- trunk/pisi/pisi/lockeddbshelve.py (original)
+++ trunk/pisi/pisi/lockeddbshelve.py Sun Dec 11 14:33:15 2005
@@ -34,12 +34,6 @@
pass
def init_dbenv():
- ctx.dbenv = dbobj.DBEnv()
- flags = (db.DB_INIT_MPOOL | # cache
- db.DB_INIT_TXN | # transaction subsystem
- db.DB_INIT_LOG | # logging subsystem
- db.DB_RECOVER | # run normal recovery
- db.DB_CREATE) # allow db to create files
if os.access(pisi.context.config.db_dir(), os.R_OK):
# try to read version
verfn = join_path(pisi.context.config.db_dir(), 'dbversion')
@@ -63,8 +57,15 @@
else:
raise Error(_('Cannot attain read access to database environment'))
if os.access(pisi.context.config.db_dir(), os.W_OK):
- pass # TODO: is it possible to have read-only txnal dbs?
- ctx.dbenv.open(pisi.context.config.db_dir(), flags)
+ ctx.dbenv = dbobj.DBEnv()
+ flags = (db.DB_INIT_MPOOL | # cache
+ db.DB_INIT_TXN | # transaction subsystem
+ db.DB_INIT_LOG | # logging subsystem
+ db.DB_RECOVER | # run normal recovery
+ db.DB_CREATE) # allow db to create files
+ ctx.dbenv.open(pisi.context.config.db_dir(), flags)
+ else:
+ ctx.dbenv = None
#def open(filename, flags='r', mode = 0644, filetype = db.DB_BTREE):
# db = LockedDBShelf(None, mode, filetype, None, True)
@@ -82,6 +83,8 @@
filename = join_path(pisi.context.config.db_dir(), dbname + '.bdb')
if os.access(os.path.dirname(filename), os.W_OK):
flags = 'w'
+ if not self.dbenv:
+ raise Error(_('Database writes not allowed without transactions'))
elif os.access(filename, os.R_OK):
flags = 'r'
else:
Uludag-commits mesaj listesiyle ilgili
daha fazla bilgi