为什么couchDB执行完全复制而不是过滤?

时间:2012-07-20 18:07:34

标签: couchdb

我在使用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?显然我错过了什么,但我无法弄明白。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

好的,这是解决方案:

正如smathy建议的那样,尝试使用新名称的另一个新目标数据库。所以这让我在日志中搜索得更好,我发现尽管我在每次测试中都删除了复制文档,但在这些删除中,其中一个未能删除其基础复制过程,该过程一直在运行。所以这个僵尸,让我觉得新的没有用。事实上,他们工作,过滤所有文档,但僵尸复制继续进行完全复制。

很难在日志中区分实际上总是有2个复制正在运行,因为僵尸执行完全复制并在日志中附加了很多,其中正常的几乎没有附加任何东西,因为它过滤掉了所有文档,让我成为只有一个,忽略了过滤功能。我应该仔细看看。

无论如何,因为我总是通过擦除/插入复制文档来启动蒲团中的复制,并且我从未从命令行或任何其他方式开始复制,我假设删除复制文档不能保证取消基础复制过程。我会更多地搜索这个。