Мы используем драйвер java datastax cassandra 2.1.2
. Используемая нами версия Cassandra - 2.0.9
.Уровень согласованности ВСЕ используемый в то время как оператор имеет уровень согласованности ДВОЙНЫЙ
У нас есть инструкция, которую мы строим с помощью QueryBuilder
, и мы устанавливаем уровень согласованности на оператор на TWO
явно.
Select selectStatement = QueryBuilder.select().from(ARTICLES);
selectStatement.where(eq(ORGANIZATION_ID, organizationId));
selectStatement.setConsistencyLevel(ConsistencyLevel.TWO);
final ResultSet rs = session.execute(selectStatement);
//call to all() will be removed since it is enough to iterate over result set
//and then you get pagination for free instead of loading everything in
//memory
List<Row> rows = rs.all();
for (final Row row : rows) {
//do something with Row, convert to POJO
}
Мы получаем исключение, как это:
com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra timeout during read query at consistency ALL (3 responses were required but only 2 replica responded)
com.datastax.driver.core.exceptions.ReadTimeoutException.copy (ReadTimeoutException.java:69)
com.datastax.driver.core.DefaultResultSetFuture.extractCauseFromExecutionException (DefaultResultSetFuture.java:259)
com.datastax.driver.core.ArrayBackedResultSet$MultiPage.prepareNextRow (ArrayBackedResultSet.java:279)
com.datastax.driver.core.ArrayBackedResultSet$MultiPage.isExhausted (ArrayBackedResultSet.java:239)
com.datastax.driver.core.ArrayBackedResultSet$1.hasNext (ArrayBackedResultSet.java:122)
com.datastax.driver.core.ArrayBackedResultSet.all (ArrayBackedResultSet.java:111)
Я знаю, что вызов all()
на ResultSet
позволяет загружать все статьи для организации памяти и работать с ним и создает нагрузку на Кассандре. Это будет удалено, как указано в комментариях. Это может вызвать таймаут чтения, но я все еще озадачен, почему в сообщении об ошибке есть ALL
.
Вопрос почему исключение говорит, что уровень согласованности ALL
используется, когда мы устанавливаем его в TWO
для первоначального заявления. Есть all()
внутренне что-то делать с запросом и использовать CL ALL
по умолчанию?
Какая версия o c * вы работаете? – phact
Мы используем Cassandra 2.0.9 –