Dear MVStore developers,
I have a question regarding concurrent access of a TransactionMap in one
transaction.
I create a Transaction and a TransactionMap.
transaction = transactionStore.begin();
map = transaction.openMap(name);
When multiple threads access this map and do a put operation concurrently
the following exception occurs:
java.lang.IllegalStateException: An old transaction with the same id is
still open: 1 [1.4.193/102]
at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:765)
at org.h2.mvstore.db.TransactionStore.log(TransactionStore.java:275)
at
org.h2.mvstore.db.TransactionStore$Transaction.log(TransactionStore.java:706)
at
org.h2.mvstore.db.TransactionStore$TransactionMap.trySet(TransactionStore.java:1104)
at
org.h2.mvstore.db.TransactionStore$TransactionMap.set(TransactionStore.java:1027)
at
org.h2.mvstore.db.TransactionStore$TransactionMap.put(TransactionStore.java:1005)
Synchronizing org.h2.mvstore.db.TransactionStore.TransactionMap.put(K, V)
using the TransactionMap itself solves the problem.
synchronized(map) {
map.put(key, value);
}
My question is whether this behavior is intentional as MVStore supports
only 'one transaction - one thread model'?
Or did I find a bug around
org.h2.mvstore.db.TransactionStore.Transaction.log(int, Object, Object)?
(As concurrent threads can log in same transaction with same logId=0)
Thanks in advance,
Roland
--
You received this message because you are subscribed to the Google Groups "H2
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/d/optout.