【问题标题】:Cassandra CQL3 support in AstyanaxAstyanax 中的 Cassandra CQL3 支持
【发布时间】:2013-01-12 20:03:56
【问题描述】:

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)

【问题讨论】:

    标签: java cassandra astyanax


    【解决方案1】:

    我使用Astyanax 1.56.31 完成了这项工作。您需要在 AstyanaxConfigurationImpl 实例中设置以下内容:

    .setTargetCassandraVersion("1.2")
    .setCqlVersion("3.0.0")
    

    【讨论】:

      【解决方案2】:

      这是因为 cassandra 客户端发生了变化,以通知不正确地使用 CQL3 实现的高级客户端应用程序。见https://issues.apache.org/jira/browse/CASSANDRA-5172

      似乎 Astyanax 要么没有升级到这个版本的 cassandra 客户端,要么他们没有记录 我目前正在寻找自己的解决方案。

      【讨论】:

      猜你喜欢
      • 2013-11-03
      • 2012-06-07
      • 2014-03-09
      • 2013-04-04
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      相关资源
      最近更新 更多