Выполнение RiakClient никогда не возвращается при выполнении BinIndexQuery - PullRequest
0 голосов
/ 08 марта 2019

Я использую riak для хранения и извлечения некоторых данных. Мне также нужно иметь возможность получать ключи значений, сгенерированных в определенном временном диапазоне, поэтому, когда я сохраняю значение, я добавляю к нему индекс String, содержащий метку времени.

Пока все в порядке, и я могу хранить и читать значения, но, когда я пытаюсь получить ключи, используя индексы, я никогда не получаю ответ от riak.

Это код, который я использую для получения ключей определенного временного диапазона:

protected List<String> fetchRangeIndex(String domainUid, String index, String from, String to) {

    String fullDomainUid = getFullDomainUid(domainUid);

    Namespace namespace = new Namespace(fullDomainUid);
    BinIndexQuery binIndexQuery = new BinIndexQuery.Builder(namespace, index, from, to).build();

    logger.debug("fetching keys in range domainUid=" + domainUid + ", index=" + index +", from=" + from + ", to=" + to);

    try {
        List<SecondaryIndexQuery.Response.Entry<String>> entries = riakClient.execute(binIndexQuery).getEntries();
        List<String> keys = new ArrayList<>();
        logger.debug("Finished reading riak");
        for (SecondaryIndexQuery.Response.Entry<String> entry : entries) {
            keys.add(entry.getIndexKey());
        }

        logger.debug("Got keys from riak=" + keys);

        return keys;
    } catch (Throwable e) {
        throw this.exceptionHandler.handleException(e);
    }

}

Когда этот код выполняется, он застревает при выполнении, не давая никакого ответа или ошибки.

Я также попытался отладить и увидел, что команда выполнена правильно, и я даже мог видеть, как она считывает ожидаемые данные, но кажется, что помечает ответ как не выполненный и поэтому никогда не возвращает ничего.

Вот так я настраиваю RiakClient

    String[] hostIPs = StringUtils.commaDelimitedListToStringArray(hosts);

    // The clustered Riak client that is configuration for as many nodes there
    // is in the Riak cluster and uses round robin between requests and retries.

    RiakNode.Builder builder = new RiakNode.Builder();
    builder.withMinConnections(2).withMaxConnections(maxConnections).withRemotePort(port);
    List<RiakNode> nodes = RiakNode.Builder.buildNodes(builder, Arrays.asList(hostIPs));

    RiakCluster riakCluster = new RiakCluster.Builder(nodes).build();
    riakCluster.start();
    riakClient = new RiakClient(riakCluster);

Я использую клиент riak 2.1.1 с сервером riak 1.2.1

Не могли бы вы помочь мне понять, что я делаю неправильно или что еще я могу сделать, чтобы получить список ключей

Обратите внимание, я не могу изменить версию сервера riak и не могу использовать клиент riak 1.x

...