Каково поведение драйвера 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 часов.