La façon de résoudre les conflits de réplication recommandés par la documentation officielle est:Résoudre les conflits de réplication des documents supprimés dans CouchDB
- Lire les révisions en conflit en utilisant le terrain
_conflicts
de document (par exemple via une vue) - Fetch docs pour toutes les révisions
- inscrite comme Perform fusion spécifique à l'application
- supprimer les révisions indésirables
Le problème se produit lorsque je souhaite fusionner supprimé documents. Ils n'apparaissent pas dans le champ _conflicts
, mais dans _deleted_conflicts
. Si je fusionne uniquement à l'aide du champ _conflicts
et qu'un document est supprimé dans la base de données locale et modifié dans la réplique à distance, il sera ressuscité localement lors de la réplication. Mon modèle d'application suppose que la suppression est toujours prioritaire lors de la fusion: un document supprimé reste supprimé quel que soit le type de modification avec lequel il est en conflit. Donc, à première vue, la chose la plus simple à faire est de vérifier que _deleted_conflicts
n'est pas vide et s'il n'est pas vide, supprimez le document, n'est-ce pas? Eh bien ... le problème avec ceci est que cela peut aussi contenir des révisions supprimées qui ont été introduites en résolvant les conflits d'édition à l'étape # 4, donc la signification de _deleted_conflicts
est ambiguë dans ce cas. Quelle est la manière canonique de traiter les conflits de suppression dans CouchDB (le cas échéant) qui n'implique pas de faire des choses grossières comme marquer des documents comme étant supprimés et filtrer sur la couche d'application?