2012-10-24 11 views
12

Die Art und Weise der Replikation Konfliktlösung durch offizielle Dokumentation empfohlen ist:Konflikte Replikation Beheben für gelöschte Dokumente in CouchDB

  1. widersprüchlichen Versionen lesen _conflicts Feld Dokument (zB über eine Ansicht)
  2. docs Fetch für alle Revisionen gelistet
  3. Führen Sie anwendungsspezifische Zusammenführung
  4. unerwünschte Revisionen entfernen

Das Problem tritt auf, wenn ich gelöschte Dokumente zusammenführen möchte. Sie erscheinen nicht in _conflicts Feld, aber in _deleted_conflicts. Wenn ich nur das Feld _conflicts zusammenführe und ein Dokument in der lokalen Datenbank gelöscht und im Remote-Replikat bearbeitet wird, wird es bei der Replikation lokal wiederhergestellt. Mein Anwendungsmodell geht davon aus, dass das Löschen beim Zusammenführen immer Vorrang hat: Ein gelöschtes Dokument bleibt gelöscht, unabhängig davon, mit welchen Bearbeitungen es Konflikte verursacht.

Also, auf den ersten Blick, ist die einfachste Sache zu tun, um zu überprüfen, dass _deleted_conflicts nicht leer ist und wenn es nicht leer ist, löschen Sie das Dokument, richtig? Nun ... das Problem dabei ist, dass dies auch gelöschte Revisionen enthalten kann, die durch Auflösen von Bearbeitungskonflikten in Schritt 4 eingeführt wurden, so dass die Bedeutung von _deleted_conflicts in diesem Fall mehrdeutig ist.

Was ist die kanonische Art der Behandlung von Löschkonflikten in CouchDB (falls vorhanden), die keine großen Dinge wie Markierung von Dokumenten als gelöscht und Filterung auf der Anwendungsebene beinhaltet?

Antwort

5

Die beste Lösung wäre, die reservierte Eigenschaft _deleted zu verwenden, um Dokumente anstelle von HTTP DELETE zu entfernen. Dann können Sie auch andere Eigenschaften festgelegt:

doc._deleted = true; 
doc.deletedByUser = true; 
doc.save(); 

dann im Mergeprozesses überprüfen der _changes für _deleted_conflicts füttern und das Dokument löschen, wenn es eine Änderung in _deleted_conflicts, die die deletedByUser Flags auf true gesetzt hat.

Ich hoffe, das hilft!

Verwandte Themen