我最近在运行测试时遇到此错误。我在本地MongoDB服务器(4.0.5)上进行了尝试,并在Mongo Atlas上进行了尝试,但是遇到了同样的问题。
我尝试增加锁定超时,但是没有效果。
我不确定是什么问题。
{ MongoError: Unable to acquire lock '{8576955153473224393: Database, 1659426125832142537}' within a max lock request timeout of '5ms' milliseconds.
at queryCallback (/home/user/workspace/my-project/node_modules/mongodb-core/lib/cursor.js:248:25)
at /home/user/workspace/my-project/node_modules/mongodb-core/lib/connection/pool.js:532:18
at _combinedTickCallback (internal/process/next_tick.js:132:7)
at process._tickDomainCallback (internal/process/next_tick.js:219:9)
errorLabels: [ 'TransientTransactionError' ],
operationTime: Timestamp { _bsontype: 'Timestamp', low_: 29, high_: 1548245676 },
ok: 0,
errmsg: 'Unable to acquire lock \'{8576955153473224393: Database, 1659426125832142537}\' within a max lock request timeout of \'5ms\' milliseconds.',
code: 24,
codeName: 'LockTimeout',
'$clusterTime':
{ clusterTime: Timestamp { _bsontype: 'Timestamp', low_: 29, high_: 1548245676 },
signature: { hash: [Object], keyId: 0 } },
name: 'MongoError',
[Symbol(mongoErrorContextSymbol)]: {} }
不是真正的修复,而是一种解决方法。由于它仅在自动测试过程中在本地计算机上发生,而在生产环境中不发生,因此可以避免。
该Unable to acquire lock
可以通过设置来防止错误maxTransactionLockRequestTimeoutMillis
的东西较高,但因为我也有过这样的错误Unable to read from a snapshot due to pending collection catalog changes; please retry the operation.
在同一时间,我想通了,下面来修复错误,反过来也是固定的第一个错误:
我的测试运行程序(AVA)为每个测试文件创建了一个新数据库,但是现在看来需要一些时间来解决问题,并await timeout(1000)
在mongoose.connect
问题消除后添加。对这个解决方案不是很满意,但是对于测试来说已经足够了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句