[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openldap-technical
Subject:    Re: LMDB transaction flags
From:       Stefano Cossu <stefano () cossu ! cc>
Date:       2020-06-29 16:22:38
Message-ID: 05ee88a2-73d0-b485-eccd-bd0cc7044c9e () cossu ! cc
[Download RAW message or body]

I see. It looks like I need to keep some state variables to track the 
transaction state. I was hoping that I could reduce my code and possible 
pitfalls by querying the transaction state flags, which are 
authoritative, but it won't be too bad.

I'm interested about the design decision not to expose some of the state 
flags which seem quite safe and useful to me, though.

Thanks for the advice,
Stefano

On 6/29/20 8:44 AM, Howard Chu wrote:
> Stefano Cossu wrote:
> > 
> > 
> > On 6/29/20 8:12 AM, Howard Chu wrote:
> > > Stefano Cossu wrote:
> > > > Hello,
> > > > I'd like to be able to know if a LMDB transaction is active, valid, dirty, \
> > > > read-only, etc.
> > > 
> > > Why? There is no valid reason for these details to be exposed to LMDB callers.
> > 
> > I am working on a library where functions use a (possibly write) transaction that \
> > is passed around several (possibly reentrant) functions. Some operations may \
> > start with a write transaction and reuse it for writing at multiple points, some \
> > others may start with a read transaction and may need to temporarily open a \
> > separate write transaction depending on some conditions. 
> > I don't want to commit a write transaction until I am sure that all \
> > inter-dependent operations are completed successfully. 
> > I thought about nested transactions, but I still need to know whether the \
> > starting txn is a write one and it is valid. 
> > If this is not the right pattern to use with LMDB I'd like to know how otherwise \
> > I can keep arbitrarily deep call stacks atomic.
> 
> This sounds pretty messy indeed. The caller that creates a transaction is expected \
> to know what operations it is going to perform on it, and thus when it is done \
> using it. 
> > > All LMDB users need to
> > 
> > > know is whether they have created a valid txn, and whether they want to abort \
> > > it or commit it.
> 
> > How do I know if a transaction is valid?
> 
> Always zero out the txn pointer immediately after calling abort or commit. Then if \
> the txn pointer is non-NULL, it is valid.
> 

-- 
exitsts .not
exeunt hoall.

http://stefano.cossu.cc


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic