How to resolve conflicts with continuous replication

佐手、 提交于 2019-11-28 18:27:20

Writing an article with examples of exactly how to manage conflict resolution is a really good idea, it can be confusing, but with the lack of one

The idea is the exact same as CouchDB, to resolve conflicts you delete the revisions that didnt win (and write a new winner if needed)

#1 is how CouchDB conflict resolution works anyway, so you dont need to worry about that, deleted leafs dont conflict

function onChange(doc) { 
  if (!doc._conflicts) return;
    collectConflicts(doc._conflicts, function(docs) {
      var master = docs.sort(byTime).unshift();
      for (var doc in docs) {
        for (var prop in doc) {
          if (!(prop in master)) { 
            master[prop] = doc[prop];
          } 
        }
      }
      db.put(master, function(err) {
        if (!err) { 
          for (var doc in docs) {
            db.remove(doc);
          }
        }
      });     
    });
  }
}

db.changes({conflicts: true, onChange: onChange});

This will need error handling etc and could be written much nicer, was just a quick napkin drawing of what the code could look like

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!