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.
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?
From the documentation I read that such information is in mt_flags of the mdb_txn structure, which is opaque. I don't see any function exposing mt_flags. Is there any other way to read that information?
No. Nor are the flag definitions public.