'Sequelize transaction with optimistic locking is locking the whole db

I have an API coded with Node.js and I use a SQLite database with Sequelize.

When I make updates, I use a transaction to rollback if something failed during the process.

The code look like this:

return sequelize.transaction(transaction => {
    return tableA.update(DataToUpdateA, {transaction})
        .then(() => {
            return UpdateValueInTableB(DataToUpdateB, {transaction});
        })
        .then(() => {
             // Do some complexe process that can take a while...
            return SomeComplexeProcess();
        })
        .catch(error => {
            // Log the error
        }); 
});

Sometimes the request take times because in SomeComplexeProcess I'm applying NTFS rights on the File System. And I need to roll back value in the database if something went wrong.

The problem is as long as the transaction is not completed the whole database is locked.

So I wanted to implement Optimistic Locking to avoid locking the whole database.

When I update something, the version field is well increment but my whole database still locked during the process.

Here is the configuration of Sequelize:

new Sequelize(username, password, dbName {
    define: {
        freezeTableName: true,
        version: true // Optimistic locking
    },
    host: ...,
    ....
}

Did I do something wrong with my configuration ?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source