Может быть, я что-то упустил, но согласно документации и всем постам онлайн, настройка
cursor.maxTimeMS(1000).toArray(...)
должно истечь через 1000 мс, а MongoDB должно завершить операцию после истечения времени ожидания.
Но ничего этого не происходит.
Во-первых, таймаута нет. Это продолжается.
Во-вторых, я проверяю db.currentOp()
, и операция все еще там, съедая всю память. Это позже добавляет и вылетает из базы данных с помощью OOM.
Все равно работает db.currentOp()
после нескольких минут отсутствия ответа:
{
"inprog" : [
{
"host" : "db2:27017",
"desc" : "conn20",
"connectionId" : 20,
"client" : "127.0.0.1:59214",
"clientMetadata" : {
"driver" : {
"name" : "nodejs",
"version" : "3.1.4"
},
"os" : {
"type" : "Linux",
"name" : "linux",
"architecture" : "x64",
"version" : "4.15.0-30-generic"
},
"platform" : "Node.js v8.10.0, LE, mongodb-core: 3.1.3"
},
"active" : true,
"currentOpTime" : "2018-09-14T00:10:29.903+0000",
"opid" : 11056,
"lsid" : {
"id" : UUID("78a2d853-30bf-4d6d-a208-0a150d9bf8be"),
"uid" : BinData(0,"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=")
},
"secs_running" : NumberLong(649),
"microsecs_running" : NumberLong(649968360),
"op" : "command",
Как видите, это продолжалось 649 секунд, хотя я явно указывал 1000 мс.
Что здесь происходит? Я выдергиваю волосы два дня и не могу этого понять.