Способом разрешения конфликтов репликации, рекомендованных официальной документацией, является:
- Прочитайте конфликтующие версии с использованием поля document
_conflicts
(например, через представление) - Получить документы для всех перечисленных изменений
- Выполнение слияния приложений
- Удаление нежелательных изменений
Проблема возникает, когда я хочу объединить удаленные документы. Они не отображаются в поле _conflicts
, но в _deleted_conflicts
. Если я объединю только поле _conflicts
, и документ будет удален в локальной базе данных и отредактирован в удаленной реплике, он будет обновлен локально при репликации. Моя модель приложения предполагает, что при объединении удаление всегда имеет приоритет: удаленные документы остаются удаленными независимо от того, с каким изменением он конфликтует.
Итак, на первый взгляд проще всего проверить, что _deleted_conflicts
не пуст, и если он не пуст, удалите документ, правильно? Ну... проблема заключается в том, что это может также содержать удаленные ревизии, которые были введены путем разрешения конфликтов редактирования на шаге 4, поэтому значение _deleted_conflicts
в этом случае является неоднозначным.
Каков канонический способ обработки конфликтов удаления в CouchDB (если есть), который не включает в себя выполнение грубых вещей, таких как маркировка документов как удаленных и фильтрующих на уровне приложения?