如何解决本地客户端删除的文件在复制后没有反映在远程服务器上
我已经编写了自己的基于 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 举报,一经查实,本站将立刻删除。