X-Git-Url: http://dolda2000.com/gitweb/?p=didex.git;a=blobdiff_plain;f=didex%2Fdb.py;h=539fc85b84bc7e0262668bf462c3b7a668fe2d54;hp=7435166cde372f7deff7d44b43b4d4d95d7bdb33;hb=73761d103993f8ec26bb61d1d405edde9efb5ddd;hpb=cbf73d3a70b97f17f1f5431eee1e73dbc56a7f8e diff --git a/didex/db.py b/didex/db.py index 7435166..539fc85 100644 --- a/didex/db.py +++ b/didex/db.py @@ -94,6 +94,15 @@ class txn(object): def postcommit(self, fun): self.pcommit.add(fun) +def dloopfun(fun): + def wrapper(self, *args, **kwargs): + while True: + try: + return fun(self, *args, **kwargs) + except deadlock: + continue + return wrapper + def txnfun(envfun): def fxf(fun): def wrapper(self, *args, tx=None, **kwargs): @@ -116,21 +125,18 @@ class database(object): self.env = env self.mode = mode self.fnm = name - fl = bd.DB_THREAD | bd.DB_AUTO_COMMIT + fl = bd.DB_THREAD if create: fl |= bd.DB_CREATE self.cf = self._opendb("cf", bd.DB_HASH, fl) self.ob = self._opendb("ob", bd.DB_HASH, fl) - def _opendb(self, dnm, typ, fl, init=None): + @txnfun(lambda self: self.env.env) + def _opendb(self, dnm, typ, fl, init=None, *, tx): ret = bd.DB(self.env.env) if init: init(ret) - while True: - try: - ret.open(self.fnm, dnm, typ, fl, self.mode) - except deadlock: - continue - return ret + ret.open(self.fnm, dnm, typ, fl, self.mode, txn=tx.tx) + return ret @txnfun(lambda self: self.env.env) def _nextseq(self, *, tx):