Nuestro mongo DB de repente deja de responder a cualquier solicitud y arroja mensajes de error como:
MongoError: cannot perform operation: a background operation is currently running for collection demo2.users at MessageStream.messageHandler (....../node_modules/mongodb/lib/cmap/connection.js:268:20) at MessageStream.emit (events.js:315:20) at processIncomingData (...../node_modules/mongodb/lib/cmap/message_stream.js:144:12) at MessageStream._write (....../node_modules/mongodb/lib/cmap/message_stream.js:42:5) at writeOrBuffer (internal/streams/writable.js:358:12) at MessageStream.Writable.write (internal/streams/writable.js:303:10) at Socket.ondata (internal/streams/readable.js:719:22) at Socket.emit (events.js:315:20) at addChunk (internal/streams/readable.js:309:12) at readableAddChunk (internal/streams/readable.js:284:9) at Socket.Readable.push (internal/streams/readable.js:223:10) at TCP.onStreamRead (internal/stream_base_commons.js:188:23) { ok: 0, code: 12587, codeName: 'BackgroundOperationInProgressForNamespace' }Este error sale de una conexión a mongo:
La operación emitida por mi aplicación es solo una conexión a la base de datos:
MongoClient.connect(mongoUrl, { useNewUrlParser: true, useUnifiedTopology: true, ...confOptions, }) .then(async client => { return client; }) .catch(err => { // And here is where the error comes console.log(err); return null; })Estamos usando el controlador MongoDB con node.js. MongoDB y node.js están en el mismo servidor (Ubuntu Linux 20.04.2)
Para reutilizar las conexiones de mongo, usamos la biblioteca npm generic-pool, y solo cuando iniciamos el servidor , configuramos al principio todos los índices y las colecciones con los comandos:
const existingCollection = await mongo.db(databaseName).listCollections({ name }).next(); if (existingCollection) { await mongo.db(databaseName).command({ collMod: name, validator: { $jsonSchema: schema }, validationLevel: 'strict', validationAction: 'error', }); } else { await mongo.db(databaseName).createCollection(name, { validator: { $jsonSchema: schema }, validationLevel: 'strict', validationAction: 'error', }); }y asegurando índices con
await mongo.db(databaseName).collection(collectionName).createIndex({ clientNumber: 1, }, { unique: true });Pero parece que mongo comienza repentinamente a realizar indexaciones, validaciones y otras operaciones en segundo plano que bloquean todo; esto sucede principalmente después de unos días de ejecutar el servidor.
La única forma en que Mongo comienza de nuevo a responder es reiniciándolo.
¿Alguien tiene alguna idea de cuál podría ser la causa de esto? ¿O hay alguna forma de detener las operaciones de fondo de bloqueo de mongo?