2015-04-16 3 views
4

Мы используем драйвер 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 по умолчанию?

+0

Какая версия o c * вы работаете? – phact

+0

Мы используем Cassandra 2.0.9 –

ответ

4

Ваша проблема почти наверняка https://issues.apache.org/jira/browse/CASSANDRA-7947. Вы видите сообщение об ошибке, из-за которого не удалось выполнить ремонт чтения. Он не связан с вашим первоначальным уровнем согласованности. Это зафиксировано в 2.1.3+.

+0

Спасибо за ответ и объяснение, я увеличу версию драйвера и попробую. –

+0

Вам нужно будет обновить cassandra, а не драйвер. Проверьте jira ptnapoleon, размещенную ^^ – phact

 Смежные вопросы

  • Нет связанных вопросов^_^