微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

本地客户端删除的文件在复制后没有反映在远程服务器上

如何解决本地客户端删除的文件在复制后没有反映在远程服务器上

我已经编写了自己的基于 JavaScript 的 CouchDB 复制客户端。

我在本地客户端有一个文档,我已将其删除{"_id":"5ebe99c6b179d0be4ff05bd43d0038d1","_deleted":true,"_rev":"2-c6667ac72ec89a03496f6e402265a2eba6a1d695"}

我提出了一个批量文档请求,将其推送到 couchdb 服务器。我得到空数组作为响应。 我使用 /{db}/doc_id?rev=deleted_doc_rev 检查远程 couchdb 服务器,它也在那里。

但是我仍然在远程服务器上看到该文档,尽管该文档已被删除并被复制。

解决方法

好吧,伙计们

问题出在我的复制器上。我在创建复制器时没有考虑 CouchDB 的 MVCC 结构。在进行批量请求的复制协议中,需要将本地存在的 MVCC 结构发送到服务器,以覆盖服务器上的当前分支 (couchdb)。

以前我的批量请求是这样的:

POST http://0.0.0.0:5984/{db}/_bulk_docs

{
  "docs" : [ {
    "_id" : "5ebe99c6b179d0be4ff05bd43d0038d1","_deleted" : true,"_rev" : "2-c6667ac72ec89a03496f6e402265a2eba6a1d695"
  } ],"new_edits" : false
}

然而,为了获得正确的基于 MVCC 的复制,需要像这样发出批量请求:

POST http://0.0.0.0:5984/{db}/_bulk_docs

{
  "docs" : [ {
    "_deleted" : true,"_id" : "5ebe99c6b179d0be4ff05bd43d0038d1","_rev" : "2-7a5de99d17a4504b2f74cda829bf7054","_revisions" : {
      "start" : 2,"ids" : [ "7a5de99d17a4504b2f74cda829bf7054","0c4f4e08acc7931c290193b1434f5e2b" ]
    }
  } ],"new_edits" : false
}

我通过研究正确的复制器实现之间的流量来发现这一点。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。