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.

-- 
  -- Howard Chu
  CTO, Symas Corp.           http://www.symas.com
  Director, Highland Sun     http://highlandsun.com/hyc/
  Chief Architect, OpenLDAP  http://www.openldap.org/project/

Reply via email to