couchDB:检查点提交失败

couchDB:检查点提交失败,couchdb,Couchdb,我有一个couchDB服务器在AmazonEC2实例上运行。这是股票1.2.0,从rpm 我还有几个运行couchbase-mobile-2.0的android设备 这些设备从服务器启动连续的推拉复制。所有这些设备最终都应该是一致的 但是,当其中一个移动设备推送文档时,当另一个移动设备尝试拉送此文档时,我在设备日志中收到以下错误: E/CouchDB(9896): [error] [<0.199.0>] Replication `bf69ede4416770a1fef28ffb4c

我有一个couchDB服务器在AmazonEC2实例上运行。这是股票1.2.0,从rpm

我还有几个运行couchbase-mobile-2.0的android设备

这些设备从服务器启动连续的推拉复制。所有这些设备最终都应该是一致的

但是,当其中一个移动设备推送文档时,当另一个移动设备尝试拉送此文档时,我在设备日志中收到以下错误:

 E/CouchDB(9896): [error] [<0.199.0>] Replication `bf69ede4416770a1fef28ffb4c4e6950+continuous` (`treatment` -> `http://portecTest:*****@50.150.250.165:5984/treatment/`) failed: {checkpoint_commit_failure,<<"Error updating the target checkpoint document: conflict">>}
E/CouchDB(9896):[错误][]复制'bf69ede4416770a1fef28ffb4c4e6950+连续'('treatment`->`http://portecTest:*****@50.150.250.165:5984/treatment/`)失败:{checkpoint_commit_failure,}
该应用程序的设计方式是,其他设备或服务器不会编辑此文档,因此不会发生版本冲突

在此之后,在我重新启动应用程序之前,将不再复制、推送或拉取文档。(连续复制在应用程序启动时初始化)。重启后,它工作


这是什么意思?知道是什么引起的吗?

我以前见过这种情况,因为复制ID冲突

在_replicator数据库中设置复制时,文档中将添加一个
_replication_id
字段(例如,对于当前复制,bf69ede4416770a1fef28ffb4c4e6950+连续)。这被复制过程本身用来通过在
http://server:5984/dbname/_local/replication-id
在复制的两端,并在那里记录像上次看到的序列号一样的内容

这还用于确定是否已将两个复制设置为执行相同的操作,因为id完全由参数生成,因此具有相同目标和源且没有其他选项的两个复制将具有相同的id

我不完全确定复制id是如何生成的(也许某处有某种种子?),但我以前肯定遇到过问题,它是在涉及的每台机器上相同地生成的(它们都有相同的复制文档,如
{source:localDb,target:remoteServer:5984/remoteDb}
),所以他们都试图使用相同的db/_local/id文档,然后抛出大量冲突,因为他们都在远程服务器上同时更改相同的文档

您可以通过比较两个移动设备上的_replication\u id字段并查看它们是否相同来检查这是否是问题

我通过在源代码中包含本地机器的地址来解决这个问题,这样每个id都不同,冲突就消失了。不过,对于移动设备来说,这可能并不实用,除非您可以在每个移动设备上获得一致的工作本地地址(一些生成的主机名?)。我找不到任何方法手动设置复制id


如果这是一个问题,那么解决方案基本上是使每个复制文档以某种方式与其他文档不同。您能否以某种方式将每个移动设备上的数据库命名为不同的东西?

我以前见过这种情况,因为复制ID冲突

在_replicator数据库中设置复制时,文档中将添加一个
_replication_id
字段(例如,对于当前复制,bf69ede4416770a1fef28ffb4c4e6950+连续)。这被复制过程本身用来通过在
http://server:5984/dbname/_local/replication-id
在复制的两端,并在那里记录像上次看到的序列号一样的内容

这还用于确定是否已将两个复制设置为执行相同的操作,因为id完全由参数生成,因此具有相同目标和源且没有其他选项的两个复制将具有相同的id

我不完全确定复制id是如何生成的(也许某处有某种种子?),但我以前肯定遇到过问题,它是在涉及的每台机器上相同地生成的(它们都有相同的复制文档,如
{source:localDb,target:remoteServer:5984/remoteDb}
),所以他们都试图使用相同的db/_local/id文档,然后抛出大量冲突,因为他们都在远程服务器上同时更改相同的文档

您可以通过比较两个移动设备上的_replication\u id字段并查看它们是否相同来检查这是否是问题

我通过在源代码中包含本地机器的地址来解决这个问题,这样每个id都不同,冲突就消失了。不过,对于移动设备来说,这可能并不实用,除非您可以在每个移动设备上获得一致的工作本地地址(一些生成的主机名?)。我找不到任何方法手动设置复制id


如果这是一个问题,那么解决方案基本上是使每个复制文档以某种方式与其他文档不同。你能为每个移动设备上的数据库命名不同的东西吗?

嗨,Vandervault,我们遇到了相同的问题,我想知道你是否解决了。对不起,这个问题是很久以前的事了,我已经离开一段时间了。是的,偶尔还会有问题。我正在迁移到couchbase lite,所以希望这不会成为任何问题more@Ezequiel. 一个更新,我有一个肮脏的修复问题。定期获取_active_tasks数据库。如果复制id不存在,请重新启动复制。复制重新启动并愉快地继续quire,因此无论GET之间的时间间隔有多长,该错误都只会延迟复制。希望能有帮助。嗨,范德堡,我们遇到了同样的问题,我想知道你是否已经解决了。对不起,这个问题是很久以前的事了,我已经离开一段时间了。是的,偶尔还会有问题。我正在迁移到couchbase lite,