[BUG] Use EnterTransaction() before EnterLock(name) when update item
lanopk opened this issue · comments
lanopk commented
Version
5.0.19 / .net 6.0.28
Describe the bug
Call insert/update/delete from several threads.
Each call uses a lock, but find-related calls do not use a lock.
Errors never occur when doing simple tasks, but errors always occur when processing a lot of tasks.
The occurrence location is the EnterLock function in LockService.cs and occurs in the ENSURE section.
DB Update Error : LiteDB.LiteException: Use EnterTransaction() before EnterLock(name)
at LiteDB.Engine.LockService.EnterLock(String collectionName)
at LiteDB.Engine.Snapshot..ctor(LockMode mode, String collectionName, HeaderPage header, UInt32 transactionID, TransactionPages transPages, LockService locker, WalIndexService walIndex, DiskReader reader, DiskService disk, Boolean addIfNotExists)
at LiteDB.Engine.TransactionService.CreateSnapshot(LockMode mode, String collection, Boolean addIfNotExists)
at LiteDB.Engine.LiteEngine.<>c__DisplayClass27_0.<Update>b__0(TransactionService transaction)
at LiteDB.Engine.LiteEngine.AutoTransaction[T](Func`2 fn)
at LiteDB.LiteCollection`1.Update(T entity)
The problem does not occur in 5.0.16, but occurs whenI update (Nuget) to version 5.0.19.
If you need more debugging on my part, please let me know what I should do and I will debug it in more detail.
Thank you.