mbdavid / LiteDB

LiteDB - A .NET NoSQL Document Store in a single data file

Home Page:http://www.litedb.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[BUG] Current transaction contains open cursors. Close cursors before run Commit() in 5.0.19

dethknite opened this issue · comments

Version: LiteDB v5.0.19

Describe the bug
When processing through records to delete oldest, the following error is thrown:
Current transaction contains open cursors. Close cursors before run Commit()

Code to Reproduce

using (var db = new LiteDatabase(connSharedReadWrite))
{
    // .... set min/max records and step
    long min=0, max=10000000;
    int step = 10000;
    long recordsToDelete = 250000;
    long recordsDeleted = 0;

    // Process
    while (min < max)
    {
        //Process each step..
        foreach (DbObject item in col.Find(Query.All("ObjectDateTime", Query.Ascending)).Skip(0).Take(step).ToArray())
        {
            //Delete Record
            col.Delete(BsonMapper.Global.Serialize(item)["_id"]);

            recordsDeleted+=1;
            if (recordsDeleted >= recordsToDelete)
                break;
        }

        if (recordsDeleted >= recordsToDelete)
            break;

        //Update position
        min += step;
    }
}

Expected behavior
In v5.018 and lower, this functions as expected and deletes records.

It looks like the same issue as in #2440 and #2435 , #2436 change fixed it for us