Alternatively, could a more stateful API be provided (as an alternative to API relying on TLS)?

Roughly what I have in mind is, mdb_txn_create() returns a state pointer, which should be passed into the next mdb_put(), which returns a state pointer, which should be passed into the next mdb_put(), and so on, until the final state is passed into mdb_commit() or mdb_abort().

Jun 7, 2023, 10:26 by samdave@tuta.io:
Thanks, I was just hoping abort was a (currently undocumented) exception to this :)

Would it be possible/feasible in the future to bring MDB_NOTLS support to read-write transactions? (or at least some partial NOTLS support for only e.g. abort)

Motivation: Ability to abort "later" (e.g. at garbage collection in some languages).. as this "later" stuff does not necessarily happen on the original thread.

- Samuel



Jun 6, 2023, 18:44 by hyc@symas.com:
Sam Dave wrote:
Hi,

The documentation for mdb_txn_begin() says "A transaction and its cursors must only be used by a single thread, and a thread may only have a single transaction
at a time.".

Does this also hold for mdb_txn_abort() for read-write transactions? I.e. does the abort also have to happen on the same OS thread as all the previous things
(begin, put, etc.)?

Calling mdb_txn_abort() requires passing the txn as a parameter, which looks pretty suspiciously to me like "using" it. Is this really a serious question?

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