I have a question about mdb_dbi_open and the handles it returns. The
official documentation suggests to me that mdb_dbi_open is supposed to be
called early on and then the obtained handle should just be reused by other
transactions without any further calls to mdb_dbi_open and mdb_dbi_close.
The code in sample-mdb.txt does that (ignoring the final close-all
sequence).
The sample also uses mdb_txn_abort to end a read-only transaction, which I
take as the recommended way to end read-only transactions. The docs state
that if a transaction aborts, then the associated DBI handles are closed,
and so mdb_dbi_open must be used again to obtain a valid handle, which, as
far as I can tell, requires a process-wide serialization of transactions
with calls to mdb_dbi_open. Which feels contrary to the style described
above, and, more importantly, just wrong with read-only transactions,
because the need to serialize them would negate the benefits of LMDB's
lock-free paradigm.
Which probably means I misunderstand something. Can read-only transactions
keep DBI handles reusable? How?
Thanks,
V.