Ensure that environment maintanence runs regularly.
[didex.git] / didex / db.py
index 539fc85..068d404 100644 (file)
@@ -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):