Каково поведение драйвера java, когда токен возобновления для потоков изменений mongodb устарел? - PullRequest
0 голосов
/ 05 июня 2018

При просмотре потока изменений в коллекции я могу указать токен возобновления (с resumeAfter), чтобы получать изменения после этого токена в журнале операций.Что произойдет, если этот токен не будет найден в журнале операций (например, клиент слишком долго отключился и предоставил старый токен)?

Особенно, будет ли java-драйвер async mongodb обнаруживать эту ситуацию и как?

Для меня этот вопрос важен, поскольку я должен определить, не потерял ли я соединение, и должен ли я снова извлечь все данные.или может полагаться на поток изменений для получения всех изменений из коллекции.

Документация гласит, что

Потоки изменений являются возобновляемыми до тех пор, пока oplogимеет достаточно истории, чтобы найти последнюю операцию, полученную приложением.

, но не указывает, что происходит иначе.Мне также довольно сложно прочитать драйвер source , чтобы определить, как клиент может определить, может ли последний токен быть найден в журнале операций.

1 Ответ

0 голосов
/ 12 июня 2018

Что происходит, если этот токен не может быть найден в журнале операций

Как упоминалось в комментарии, такое поведение происходит на сервере MongoDB.Когда клиент (т. Е. Приложение, написанное с использованием драйвера Java) отправляет resumeToken, сервер проверяет токен.См. Также resume_token.cpp (v3.7.0)

Любые найденные сервером ошибки будут возвращены клиенту, после чего клиент вызовет исключение.В случае драйвера Java MongoDB это будет com.mongodb.MongoCommandException.

Если проблема связана с падением OpLog, я бы посоветовал рассчитать размер oplog набора реплик *1016* в соответствии с периодом кэширования токена возобновления.Например.Если OpLog может хранить до 24 часов операций, токен возобновления может кэшироваться каждые 8-12 часов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...