Il modo di risolvere i conflitti di replica raccomandate da documentazione ufficiale è:Risoluzione dei conflitti di replica per i documenti eliminati in CouchDB
- Leggi revisioni contrastanti utilizzando il campo del documento
_conflicts
(ad esempio tramite una vista) - Fetch documentazione per tutte le revisioni elencati
- Eseguire applicazioni specifiche fusione
- rimuovere le revisioni indesiderati
Il problema si verifica quando desidero unire documenti eliminati. Non vengono visualizzati nel campo _conflicts
, ma in _deleted_conflicts
. Se mi unisco solo utilizzando il campo _conflicts
e un documento viene eliminato nel database locale e modificato nella replica remota, verrà resuscitato localmente sulla replica. Il mio modello di applicazione presuppone che l'eliminazione abbia sempre la precedenza quando si uniscono: un documento cancellato rimane cancellato indipendentemente da quale modifica è in conflitto con.
Quindi, a prima vista, la cosa più semplice da fare è verificare che _deleted_conflicts
non sia vuoto e, se non è vuoto, eliminare il documento, giusto? Bene ... il problema con questo è che questo può contenere anche revisioni eliminate che sono state introdotte risolvendo i conflitti di modifica nel passaggio 4, quindi il significato di _deleted_conflicts
è ambiguo in questo caso.
Qual è il modo canonico di gestire i conflitti di eliminazione in CouchDB (se ce n'è uno) che non implichi operazioni grossolane come la marcatura di documenti come eliminati e il filtraggio a livello di applicazione?