0

我正在尝试在 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

4

1 回答 1

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"}

要获取复制的状态,请获取 _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 检查连续复制是否仍在进行,如果没有则重新启动它们。但是您仍然应该使用连续复制。

于 2013-08-18T02:05:43.953 回答