Поэтому я копирую кучу данных из кластера Riak (кластер 1.4) в кластер Riak (кластер 2.0) из-за кучи раздражающих (и не относящихся к моей проблеме) ограничений среды, что делает невозможным обновление кластера любым другим способом,
Я использую клиент Java 1.4 Riak для общения с обоими кластерами. Я прочитал ключ от моего 1.4-кластера и, сохраняя тот же самый IRiakObject, записываю его в кластер 2.0.
Если я запустил это в отладчике и проверил указанный IRiakObject, я вижу, что на этом объекте фактически заполнены вторичные индексы.
Но когда я действительно запускаю это, я вижу, что кластер 2.0 не принимает вторичные индексы - они возвращаются пустыми, когда я делаю GET в кластере 2.0 для этого ключа.
Что я делаю не так?
Пример кода ниже. Обратите внимание, что это собирается из 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 использует Bitcask. Бит-бокс не поддерживает вторичные индексы.