Вторичные индексы Riak не сохраняются с помощью Java-клиента при копировании ключей кросс-кластерно

1

Поэтому я копирую кучу данных из кластера 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()
Теги:
riak

2 ответа

1
Лучший ответ

Оказывается, что, вызывая value.getValue, я превращаю свой IRiakObject в байт [] и удаляю информацию вторичного индекса. Когда я просто храню это значение, я получаю поведение, которое я ожидаю.

  • 0
    Неочевидное решение, спасибо, что поделились.
0

Является ли другой кластер настроен на использование бэкэнда Leveldb? По умолчанию 2.0 использует Bitcask. Бит-бокс не поддерживает вторичные индексы.

  • 0
    Да, он настроен на использование leveldb.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню