Android上的couchDb中不存在_replicate db

时间:2013-08-14 12:55:44

标签: couchdb couchbase touchdb

我正在尝试在Android平板电脑和系统之间设置复制。我使用CouchDbInstance对象来设置复制

这是我的代码

 /**
     * @param builder
     * @param couchDbInstance
     * @return the @Link{ReplicationStatus} for the replication command @Link {ReplicationCommand.Builder}
     */
    private ReplicationStatus replicate(ReplicationCommand.Builder builder, CouchDbInstance couchDbInstance) {
        int retryCount = 0;
        ReplicationStatus replicationStatus = null;
        while (retryCount < REPLICTAION_RETRY_MAX) {
            replicationStatus = couchDbInstance.replicate(builder.build());
            if (replicationStatus.isOk()) {
                break;
            }
            retryCount++;
        }
        return replicationStatus;
    }

在沙发日志中,我看到_replicate上的POST返回404

我们使用couchbasemobile,我知道它不再受支持。我是否可以知道是否不支持_replicate复制方式,是否应该使用_replicator复制方式

1 个答案:

答案 0 :(得分:0)

我不太了解java,所以我猜这里,但我认为你的问题是误解了如何使用_replicate。

此处的文档说明:http://wiki.apache.org/couchdb/Replication它不再是官方文档,因为我认为他们希望人们使用_replicator。

要开始连续复制,请POST到_replicate:

{"source":"example-database","target":"target-db", "continuous": true}

作为回应,你得到:

{"ok":true,"_local_id":"127c65ee56bcd253d9a019f5a6f84f16+continuous+create_target"}

要获取复制的状态,请GET _active_tasks。作为响应,对于每个活动复制,您将获得:

{"ok":true,"_local_id":"127c65ee56bcd253d9a019f5a6f84f16+continuous+create_target"}

如果“_local_id”不在_active_tasks中,则不会进行复制。

我认为你的问题就在这里:

replicationStatus = couchDbInstance.replicate(builder.build());

我不知道您正在使用的库,但这似乎是错误的。您应该检查_active_tasks以查看_local_id是否存在。此外,您似乎正在实施自我连续复制。

使用couchbasemobile,我发现有一些连续复制的错误,并且最好定期GET _active_tasks来检查连续复制是否仍在进行,如果不是则重新启动它们。但是你仍然应该使用连续复制。