X-Git-Url: http://dolda2000.com/gitweb/?p=didex.git;a=blobdiff_plain;f=didex%2Fdb.py;h=068d404185d45f006b1a79821d573d9fcfade944;hp=539fc85b84bc7e0262668bf462c3b7a668fe2d54;hb=947dfab3c174ecce6bd1ff18bdc4df7e0e4087c1;hpb=cbcc163b2acbcf15e1819d73cf9625c5fadfadf8 diff --git a/didex/db.py b/didex/db.py index 539fc85..068d404 100644 --- a/didex/db.py +++ b/didex/db.py @@ -64,7 +64,8 @@ def opendb(env, fnm, dnm, typ, fl, mode): class txn(object): def __init__(self, env, flags=bd.DB_TXN_WRITE_NOSYNC): - self.tx = env.txn_begin(None, flags) + self.tx = env.env.txn_begin(None, flags) + self.env = env self.done = False self.pcommit = set() @@ -78,6 +79,7 @@ class txn(object): finally: run1(list[1:]) run1(list(self.pcommit)) + self.env.maint() def abort(self): self.done = True @@ -131,14 +133,14 @@ class database(object): self.cf = self._opendb("cf", bd.DB_HASH, fl) self.ob = self._opendb("ob", bd.DB_HASH, fl) - @txnfun(lambda self: self.env.env) + @txnfun(lambda self: self.env) def _opendb(self, dnm, typ, fl, init=None, *, tx): ret = bd.DB(self.env.env) if init: init(ret) ret.open(self.fnm, dnm, typ, fl, self.mode, txn=tx.tx) return ret - @txnfun(lambda self: self.env.env) + @txnfun(lambda self: self.env) def _nextseq(self, *, tx): if self.cf.has_key(b"seq", txn=tx.tx): seq = struct.unpack(">Q", self.cf.get(b"seq", txn=tx.tx))[0] @@ -147,27 +149,27 @@ class database(object): self.cf.put(b"seq", struct.pack(">Q", seq + 1), txn=tx.tx) return seq - @txnfun(lambda self: self.env.env) + @txnfun(lambda self: self.env) def add(self, ob, *, tx): seq = self._nextseq(tx=tx) self.ob.put(struct.pack(">Q", seq), ob, txn=tx.tx, flags=bd.DB_NOOVERWRITE) return seq - @txnfun(lambda self: self.env.env) + @txnfun(lambda self: self.env) def replace(self, id, ob, *, tx): key = struct.pack(">Q", id) if not self.ob.has_key(key, txn=tx.tx): raise KeyError(id) self.ob.put(key, ob, txn=tx.tx) - @txnfun(lambda self: self.env.env) + @txnfun(lambda self: self.env) def get(self, id, *, tx): ret = self.ob.get(struct.pack(">Q", id), None) if ret is None: raise KeyError(id) return ret - @txnfun(lambda self: self.env.env) + @txnfun(lambda self: self.env) def remove(self, id, *, tx): key = struct.pack(">Q", id) if not self.ob.has_key(key, txn=tx.tx):