MongoDB Client (nodejs) не закрывает соединения - PullRequest
0 голосов
/ 03 июня 2019

У меня есть следующий код, эта функция вызывается миллионы раз, чтобы получить определенное поле продукта в базе данных mongo:

const mongo = require('mongodb').MongoClient

const defaultQueryProjection = {
    _id: 0,
    sku: 1,
    category: 1
}

let DB_SERVERS;
let username;
let password;
let database;


function anotherFunctionThatInitsTheAboveVariables(){
    ...
}


async function getCategoryBySkuArray(skus){

    let client;
    try {
        const dbFields =  [        
            "category"
        ];

        // Connect to DB
        const connectionUrl =
            `mongodb://${username}:${password}@${DB_SERVERS.join(',')}/?authSource=${database}`;
        client = await mongo.connect(connectionUrl, {
            useNewUrlParser: true,
            readPreference: 'secondaryPreferred',
            replicaSet,
            reconnectTries: 10,
            reconnectInterval: 300
        });

        let productsData;

        const db = client.db(database);

        // Query DB
        const queryProjection = {
            ...defaultQueryProjection,
            ...dbFields.reduce((projection, property) => ({ ...projection, [property]: 1}), {})
        };

        productsData = await db.collection('products')
            .find({sku: {$in: skus}}, {projection: queryProjection})
            .toArray();

        if(client){
            await client.close();
            console.log('Client closed');
        }else{
            console.log('Client did not close');
        }

        return productsData;

    } catch (error) {
        if(client){
            await client.close();
            console.log('Client closed');
        } else {
            console.log('Client not closed on exception');
        }
        console.log(error);
    }
}

Теперь я запускаю приложение nodejs на pm2. Я замечаю, что активныйДескрипторы продолжают увеличиваться, не уменьшаясь, я выполнил следующую команду:

lsof -i -n -P и проверил, существует ли множество TCP-соединений с моими базами данных mongodb, которые не закрываются, почему это происходит?

У кого-нибудь есть подсказка?Спасибо!

...