Поддержка Cassandra CQL3 в Astyanax

Поддерживает ли Astyanax "вставку" в подготовленный оператор с CQL3? Я использую последнюю библиотеку Astyanax 1.56.24 и Cassandra 1.2.1. Когда я пытаюсь выполнить подготовленный оператор с CQL3:

keyspace.prepareQuery(conn.CF_CONTACTS)
  .withCql("INSERT INTO contacts (a, b) VALUES (?, ?);")
  .asPreparedStatement()
  .withStringValue("123")
  .withStringValue("456")
  .execute();;

Я получаю следующее исключение:

Caused by: InvalidRequestException(why:Cannot execute/prepare CQL2 statement since the CQL has been set to CQL3(This might mean your client hasn't been upgraded correctly to use the new CQL3 methods introduced in Cassandra 1.2+).)
at org.apache.cassandra.thrift.Cassandra$prepare_cql_query_result.read(Cassandra.java:38738)
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)
at org.apache.cassandra.thrift.Cassandra$Client.recv_prepare_cql_query(Cassandra.java:1598)
at org.apache.cassandra.thrift.Cassandra$Client.prepare_cql_query(Cassandra.java:1584)
at com.netflix.astyanax.thrift.ThriftColumnFamilyQueryImpl$6$3$1.internalExecute(ThriftColumnFamilyQueryImpl.java:747)
at com.netflix.astyanax.thrift.ThriftColumnFamilyQueryImpl$6$3$1.internalExecute(ThriftColumnFamilyQueryImpl.java:742)
at com.netflix.astyanax.thrift.AbstractOperationImpl.execute(AbstractOperationImpl.java:56)

2 ответа

Решение

Это связано с тем, что изменение в клиенте cassandra уведомляет высокоуровневые клиентские приложения, которые неправильно используют реализацию CQL3. См. https://issues.apache.org/jira/browse/CASSANDRA-5172

Похоже, что Astyanax либо не обновился до этой версии клиента cassandra, либо они не документировали, что я сейчас ищу решение для себя.

Я получил это с помощью работы Astyanax 1.56.31, Вы должны установить следующее в вашем AstyanaxConfigurationImpl пример:

.setTargetCassandraVersion("1.2")
.setCqlVersion("3.0.0")
Другие вопросы по тегам