MongoDB toArray () зависает - PullRequest
       25

MongoDB toArray () зависает

0 голосов
/ 10 июля 2019

По сути, все, что я делаю, - это агрегирование данных, а затем преобразование их в массив. Этот процесс работает около 2000-4000 раз, пока не произойдет зависание, которое невозможно восстановить. Вот мой фрагмент кода:

  try {
    res = await db.collection("palStats").aggregate([...],    
      { maxTimeMS: 5000, allowDiskUse: true }
    );
    debug("#### AGG COMPLETE");
  } catch (error) {
    debug("AGGREGATION error=============>", error, res);
  }
  try {
    res = await Timeout.wrap(res.toArray(), 10000, "toArray time out");
  } catch (error) {
    debug("toArray error =================>", error, res);
  }
  Array.isArray(res)
    ? null
    : debug("response toArray fail ===============>", res);
  res = Array.isArray(res) ? res : null;

  if (res != null) {
    debug("####toArray worked###");
    res.forEach(i => (i["modeType"] = i.mode[0]));
    debug("###for each passed###");
  }
  return res;

Нет сообщений об ошибках, вызов просто зависает до истечения времени ожидания (3600 секунд). По истечении времени ожидания Mongo не может быть восстановлен, и новые подключения не могут быть открыты. Сначала я думал, что это агрегация, но я сузил его до зависания при вызове toArray ().

В настоящее время я использую Mongo 4.0.9, но я попробовал почти все другие версии 4 без удачи.

Я поместил курсор в область сбоя агрегации и сравнил его с проходящим курсором, но я не могу найти никакой разницы, которая была бы существенной.

Различия в курсоре агрегации:

У проходящего курсора есть init: false и session: null?

Сбой:

21:00:     session: ClientSession {
21:00:       _events: [Object: null prototype],
21:00:       _eventsCount: 1,
21:00:       _maxListeners: undefined,
21:00:       topology: [Server],
21:00:       sessionPool: [ServerSessionPool],
21:00:       hasEnded: false,
21:00:       serverSession: [ServerSession],
21:00:       clientOptions: undefined,
21:00:       supports: [Object],
21:00:       clusterTime: null,
21:00:       operationTime: null,
21:00:       explicit: false,
21:00:       owner: [Circular],
21:00:       defaultTransactionOptions: {},
21:00:       transaction: [Transaction]
21:00:     }
21:00:   },


21:00:     init: true,
...