MongoDB убивает бессмертных курсоров

Я использую PHP драйвер mongodb / mongodb v 1.1.2

Информация о водителе низкого уровня:

mongodb version => 1.1.7
mongodb stability => stable
libmongoc version => 1.3.5
libbson version => 1.3.5

MongoDB 3.4.7 и 3.4.10

Варианты подключения:

socketTimeoutMS=3600000

Параметры курсора:

maxTimeMs: 360000
noCursorTimeout: true

Поэтому я предполагаю, что курсор должен быть бессмертным

Программа работала нормально, затем она вылетела со следующей ошибкой:

[29-Nov-2017 15:23:04 UTC] PHP Fatal error:  Uncaught MongoDB\Driver\Exception\RuntimeException: Cursor not found (namespace: 'xxxx.yyyy', id: 6220790657981310420).

В бревнах mongos я вижу

2017-11-29T15:21:12.025+0000 I QUERY    [ClusterCursorCleanupJob] Marking cursor id 6220790657981310420 for deletion, idle since 2017-11-29T15:11:11.139+0000
2017-11-29T15:21:16.026+0000 I QUERY    [ClusterCursorCleanupJob] Marking cursor id 6220790657981310420 for deletion, idle since 2017-11-29T15:11:11.139+0000
2017-11-29T15:21:20.026+0000 I QUERY    [ClusterCursorCleanupJob] Marking cursor id 6220790657981310420 for deletion, idle since 2017-11-29T15:11:11.139+0000
...
2017-11-29T15:22:56.029+0000 I QUERY    [ClusterCursorCleanupJob] Marking cursor id 6220790657981310420 for deletion, idle since 2017-11-29T15:11:11.139+0000
2017-11-29T15:23:00.029+0000 I QUERY    [ClusterCursorCleanupJob] Marking cursor id 6220790657981310420 for deletion, idle since 2017-11-29T15:11:11.139+0000
2017-11-29T15:23:04.029+0000 I QUERY    [ClusterCursorCleanupJob] Marking cursor id 6220790657981310420 for deletion, idle since 2017-11-29T15:11:11.139+0000

Обратите внимание, что отметка времени «бездействует с» одинакова для всех строк. Я почти уверен, что программа активно извлекала данные из этого курсора.

У меня нет точного времени создания курсора, но это произошло не ранее 15:03:35.

Проблема очень редкая. У меня много активных курсоров, некоторые из них живут часами. Этот был убран через 20 минут

0

Решение

Единственная поддерживаемая Коллекция варианты

  • readConcern
  • readPreference
  • TypeMap
  • writeConcern

DocsRef

maxTimeMS а также noCursorTimeout варианты Курсор. Вы должны передать их в find() и подобные команды.

DocsRef

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector