Драйвер DSE cassandra для Java, возвращающий только частичные результаты в асинхронном режиме - PullRequest
0 голосов
/ 24 мая 2018

Я получаю только частичный набор строк при извлечении из Кассандры с использованием драйвера dse cassandra 3.1.4 для Java.Этот запрос также работает с более ранней версией драйвера, который мы использовали.Более ранняя версия была 2.1.9

Структура таблицы выглядит следующим образом

Key     column1 value
CM~020  000001000  20
CM~010  000001000  10

Когда я запрашиваю несколько строк с помощью асинхронного вызова, большую часть времени я получаю только одну строку.Иногда во время отладки я получаю и другую строку.

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

for (Object partitionKey : partitionKeys) {
        paramArray[0] = partitionKey;
        futures.add(session.executeAsync(boundStatement.bind(paramArray)));
}

Есть ли способ убедиться, что я получаю все строки каждый раз?

1 Ответ

0 голосов
/ 24 мая 2018

Наиболее очевидная вещь здесь - это то, что у вас есть условие гонки - я вижу, что вы повторно используете один и тот же объект массива для задания параметров, и из вашего исходного кода похоже, что вы используете тот же BoundStatementэкземпляр, поэтому вы перезаписываете данные запроса ...

Я рекомендую вместо этого изменить код, чтобы использовать preparedStatement.bind(paramArray) вместо boundStatement.bind(paramArray) -> вместо этого будет создан новый экземпляр BoundStatement.

PS Если раньше это работало, то это было просто совпадение ...

...