如何在 couchbase 复制期间保持复制的修订?

How to keep replicated revision during couchbase replication?

在我的 android 应用程序中,我使用 sync_gateway 设置了拉取复制。

由于特定应用程序的逻辑,每当检测到冲突时,我只需要保留从服务器复制的文档修订。

我能够定义哪个冲突版本来自复制(服务器),哪个冲突版本来自本地修改(移动应用程序)。

如果我使用复制修订版(即 suggested approach)中的数据创建墓碑和新修订版,我将遇到连续冲突,因为本地修订版 ID 始终与服务器(用于选择 currentRevision 的任何新修订将具有不同的 ID)。

我最好的解决方案是只保留服务器版本作为当前版本并丢弃任何其他版本。

我该怎么做?

是否可以清除修订?或者是否可以创建一个仅包含服务器修订版的对象,以便在解决冲突后,任何其他没有冲突的拉动只会更新我的文档?我需要一个类似于覆盖的行为。

这取决于冲突解决的结果应该是什么:

  • 合并文档属性:在这种情况下,您需要创建一个新修订,其属性来自每个冲突修订,然后删除所有修订。

  • 清理冲突的修订:在这种情况下,您可以删除除您想保留的修订以外的所有修订。可能您要保留的修订不是当前修订,但删除所有其他修订将使它成为当前修订。

参见 TodoLite-Android 冲突解决示例 (https://github.com/couchbaselabs/ToDoLite-Android/blob/bcd87faa4c68a7cee075468b08da55c8041830a7/ToDoLite/src/main/java/com/couchbase/todolite/ListConflicts.java#L51-L81)。

我解决了问题,但问题是我弄糊涂了。

这就是我从 my post here 的回复中学到的:

  • 已删除的修订无法胜过未删除的修订,即使它们的修订号更高
  • 当你有冲突时,这意味着修订树中有开放分支(开放分支是指末尾没有墓碑的修订分支)
  • 如果您没有冲突,则意味着您可能有不同的修订分支,但除一个分支外,所有分支的末尾都有墓碑修订。没有墓碑的是当前(获胜)版本
  • 如果所有分支都有墓碑,说明你已经删除了文档
  • 当代表当前(获胜)修订的开放分支被墓碑修订关闭时,仍然开放的分支(冲突分支)中的另一个开放分支被选为当前(获胜)修订。如果没有其他打开的分支,则该文档被视为已删除
  • 当一个不代表当前(获胜)修订(并因此产生冲突)的开放分支被逻辑删除修订关闭时,除了该分支不再产生冲突外,没有任何变化