how to solve this transaction error in mlab? [MongoError: Transaction numbers are ... support document-level locking]
Asked Answered
S

3

14

I'm trying to do a simple transaction using mongoose. It worked totally fine on MongoDB Atlas, but in mlab I got such an error: MongoError: Transaction numbers are only allowed on storage engines that support document-level locking. I did some research, but didn't really find any resources regarding mlab and document-level locking. Does anyone know how to solve this problem?

Sluff answered 27/4, 2019 at 7:48 Comment(6)
The error message indicates that your mLab deployment is using the older (and now deprecated) MMAPv1 storage engine which does not support document-level locking or transactions. Server-side multi-document transactions require a MongoDB 4.0+ replica set deployment using the WiredTiger storage engine. Upgrading your mLab deployment to meet the transaction requirements will resolve the error.Justify
did you solve it ? ThanksHop
Thanks to Stennie answer i was able to figure this out. I'm using Ruby/Rails with MongoID, and I was having the same issue (Transaction numbers are only allowed on storage engines that support document-level locking (20)), oddly it was only happening in the production environment (Heroku) and not in development environment, my mongoDB database was on mlab (3.6.12 (MMAPv1)) i moved to Atlas and the issue disappear + i'm running Mongo 4+ now.Fetlock
yes Carlos, just like Juan Ricardo I moved to mongodb cloud (atlas) and it was solved.Sluff
@JuanRicardo I had the same issue using Ruby/Rails I solved using mongo 2.8.0 driver. I was using mongoid 6.1.1 with mongo 2.9.0. Take a look at this issueBiophysics
Note that databases hosted at mLab actually cannot be upgraded to version 4.0 or 4.2. However, you can migrate to MongoDB Atlas (MongoDB bought mLab) and get later versions thereafter. See this FAQ: docs.mlab.com/faq/#do-you-support-mongodb-40-or-42Yolk
U
16

I have same issue, then I contact mlab help, here is their reply:

That error indicates your app/driver is attempting to use a feature that's not compatible with your Shared Cluster deployment, which employs the MMAPv1 storage einge. It's likely that you have retryable writes (https://docs.mongodb.com/manual/core/retryable-writes/) enabled. Can you try turning that feature off in the connection string (https://docs.mongodb.com/manual/reference/connection-string/#urioption.retryWrites), or directly from your driver settings?

Please let us know if you continue to experience this error after turning off this feature.

Based on this answer, I appended retryWrites=false in mongodb connection url, then it works well.

Unfreeze answered 13/8, 2019 at 3:3 Comment(0)
B
9

This worked for me by adding retryWrites=false ;

Current URL

 mongodb://<user>:<password>@ds0145508.mlab.com:11508/testdb

New URL

mongodb://<user>:<password>@ds0145508.mlab.com:11508/testdb?retryWrites=false 
Bridgeport answered 22/3, 2020 at 4:16 Comment(0)
T
1

mlab.com runs mongodb 3.6, while the newest is 4.2.x and tools, db connectors, etc., want to use 4.x features.

In short, mlab.com is outdated.

Tafoya answered 13/2, 2020 at 5:45 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.