Репликация CouchDB, игнорирующая отдельные документы - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть настройка CouchDB (CouchDB 2.1.1) для моего приложения, которая сильно зависит от целостности репликации.Мы используем подход «один дБ на пользователя» с дополнительным уровнем «роли» db: s, который группирует пользователей, как показано на рисунке ниже.

Недавно, увеличив число бета-тестеров, мы обнаружили, чтонекоторые документы не были воспроизведены должным образом.Мы не можем увидеть какой-либо шаблон по размеру документа, времени создания / обновления, пользователю или другому.Ошибки кажутся случайными, с 2-3 успешно реплицированными документами, за которыми следуют 4-6 без репликации документов.

Сервер отвечает {"error":"not_found","reason":"missing"} на эти документы.

Большая часть (но не все) пользовательских документов была реплицирована в соответствующую Ролевую БД, но очень немногие сделали это полностьюМастер БД.Этого никогда не случалось при тестировании с <100 документами (сейчас у нас 1000-1200 документов в БД). </p>

Я обнаружил проблему с настройкой "max open files", упомянутой в главе "Производительность "в документах и исправил его, но не реплицированные документы все еще не реплицируются.Если я открою документ и сохраню его, он будет реплицирован.

Это моя текущая теория:

  1. Процесс репликации пытался копировать новые документы, когда пользователь вышел в сеть
  2. Процесс записи не удался из-за пика "max_open_files" в Linux
  3. Основная БД по-прежнему считает, что репликация прошла успешно
  4. При более поздней репликации главная БД игнорирует эти старые документы и только пытаетсякопировать новые

Может ли это быть правильным?И могу ли я как-нибудь заставить сервер CouchDB "дважды проверить" все документы и целостность предыдущих копий?

Спасибо за ваше время и любые полезные комментарии!

Couch replication schema

1 Ответ

0 голосов
/ 08 февраля 2019

В прошлом я сталкивался с чем-то похожим - при попытке репликации документов без достаточных разрешений репликация завершается неудачно, как и должно быть.Но когда проблема с разрешениями устранена, документы, которые вы пытались реплицировать, не могут быть реплицированы, хотя редактирование / сохранение документов устраняет проблему.Интересно, это из-за контрольно-пропускных пунктов?В руководстве CouchDb говорится о флаге «use_checkpoints»:

Отключение контрольных точек не рекомендуется, поскольку CouchDB будет сканировать ленту изменений исходной базы данных с самого начала.

Хотя сканирование с самого начала звучит так, как будто оно может решить проблему, поэтому, возможно, отключение контрольных точек может помочь.Я никогда не возвращался к этому вопросу в то время, поэтому боюсь, что это не правильный ответ, а просто предложение.

...