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

跨集群复制密钥时,未使用Java客户端保留Riak辅助索引,java,riak,Java,Riak,因此,我将一组数据从Riak集群a(1.4集群)复制到Riak集群B(2.0集群),这是由于一组恼人的(与我的问题无关)环境约束,使得无法以任何其他方式升级集群 我使用Java1.4RIAK客户端与这两个集群进行通信。我从我的1.4集群中读入密钥,然后-保持完全相同的IRiakObject-将其写入2.0集群 如果我在调试器中运行它并检查所说的IRiakObject,我会看到二级索引实际上是在这个对象上填充的 但是当我实际运行它时,我发现2.0集群不接受二级索引——当我为这个键在2.0集群上执行

因此,我将一组数据从Riak集群a(1.4集群)复制到Riak集群B(2.0集群),这是由于一组恼人的(与我的问题无关)环境约束,使得无法以任何其他方式升级集群

我使用Java1.4RIAK客户端与这两个集群进行通信。我从我的1.4集群中读入密钥,然后-保持完全相同的IRiakObject-将其写入2.0集群

如果我在调试器中运行它并检查所说的IRiakObject,我会看到二级索引实际上是在这个对象上填充的

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

我做错了什么

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


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

事实证明,通过调用value.getValue,我将IRiakObject转换为一个字节[],从而去除了二级索引信息。当我只存储值本身时,我得到了我期望的行为。

是的,它被配置为使用leveldb。
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()