Каково поведение драйвера java, когда токен возобновления для потоков изменений mongodb устарел?

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

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

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

В документации говорится, что

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

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

1 ответ

Решение

Что произойдет, если этот токен не найден в оплоге

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

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

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

Другие вопросы по тегам