跨集群复制密钥时,未使用Java客户端保留Riak辅助索引



因此,由于一系列令人讨厌的(与我的问题无关的)环境限制,我将一堆数据从Riak集群a(1.4集群)复制到Riak集群B(2.0集群),无法以任何其他方式升级集群。

我使用Java 1.4 Riak客户端与这两个集群进行通信。我从1.4集群中读取了密钥,并保持完全相同的IRiakObject,将其写入2.0集群。

如果我在调试器中运行它并检查所说的IRiakObject,我会发现辅助索引实际上是在这个对象上填充的。

但是当我实际运行这个时,我看到2.0集群不接受二级索引——当我在2.0集群上为这个键执行GET时,二级索引返回为空。

我做错了什么?

示例代码如下。请注意,这是从Scala组装而来的,但它使用的是Java库。请注意,sourceRiakClient和destRiakClient不对应于同一服务器。(getBucket和cloneBucket是我写的方法。)

val srcBucket : Bucket = getBucket(sourceRiakClient, bucketName)
val destBucket: Bucket = cloneBucket(destRiakClient, bucketName, srcBucket)
val value: IRiakObject = bucket.fetch(key).execute()
destBucket.store(key, value.getValue).withoutFetch().execute()

事实证明,通过调用value.getValue,我将IRiakObject变成了一个字节[],并剥离了辅助索引信息。当我简单地存储值本身时,我得到了我期望的行为。

其他集群是否配置为使用Leveldb后端?默认情况下,2.0使用Bitask。Bitask不支持二级索引。

最新更新