我在使用couchdb复制时遇到了这个问题:我正在使用复制器db和这个安装文档:
{
"_id": "source_to_target",
"_rev": "1-2a6510e28c2cc7caf0d58a85d705d2b8",
"source": "http://xxxx:xxxx@localhost:5984/sourcedb",
"target": "targetdb",
"create_target": true,
"continuous": true,
"filter": "sourcedb/repl_filter",
"query_params": {
"someproperty": "somevalue"
},
"user_ctx": {
"name": "someadmin",
"roles": [
"_admin"
]
}
}
问题是过滤器功能被忽略了。我确信这是正确的,因为如果我调用:
curl -X GET "http://localhost:5984/sourcedb/_changes?filter=sourcedb/repl_filter&someproperty=somevalue&feed=continuous&style=all_docs&since=0"
结果已正确过滤。
我按如下方式进行测试:
我完全删除目标数据库。然后我擦除上面的复制并从头开始重新创建它。 一旦上面显示的复制文档被提交,复制就会开始,而不是过滤的文档,目标数据库将获取所有文档,这构成了我的问题。日志提供了原因:
[Fri, 20 Jul 2012 17:43:38 GMT] [info] [<0.5860.17>] Replication records differ. Scanning histories to find a common ancestor.
[Fri, 20 Jul 2012 17:43:38 GMT] [info] [<0.5860.17>] no common ancestry -- performing full replication
,这让我头脑发热,因为我在开始复制之前完全删除了目标数据库,为什么要搜索一个尚未创建数据库的常见ancsestors?显然我错过了什么,但我无法弄明白。有什么建议吗?
答案 0 :(得分:2)
好的,这是解决方案:
正如smathy建议的那样,尝试使用新名称的另一个新目标数据库。所以这让我在日志中搜索得更好,我发现尽管我在每次测试中都删除了复制文档,但在这些删除中,其中一个未能删除其基础复制过程,该过程一直在运行。所以这个僵尸,让我觉得新的没有用。事实上,他们工作,过滤所有文档,但僵尸复制继续进行完全复制。
很难在日志中区分实际上总是有2个复制正在运行,因为僵尸执行完全复制并在日志中附加了很多,其中正常的几乎没有附加任何东西,因为它过滤掉了所有文档,让我成为只有一个,忽略了过滤功能。我应该仔细看看。
无论如何,因为我总是通过擦除/插入复制文档来启动蒲团中的复制,并且我从未从命令行或任何其他方式开始复制,我假设删除复制文档不能保证取消基础复制过程。我会更多地搜索这个。