在cassandra中使用TTL指定列到期时间

时间:2012-07-09 08:57:23

标签: java jdbc cassandra cql

当我在TTL列到期时插入值时,它会给我一些意想不到的输出

public static void setTTL()
    {
        try
        {
            Class.forName("org.apache.cassandra.cql.jdbc.CassandraDriver");
            Connection con = DriverManager.getConnection("jdbc:cassandra://192.168.1.32/temp");
            String qry = "INSERT INTO userscql3(user_name,password)VALUES('yogesh','temp@123') USING TTL 5";
            Statement smt = con.createStatement();
            smt.executeUpdate(qry);
            System.out.println(" TTL has been set");
        }
        catch(Exception e)
        {
            System.out.println(" : " + e.getMessage());
            e.printStackTrace();
        }
    }

跟踪它后我得到了什么

Caused by: UnavailableException()
    at org.apache.cassandra.thrift.Cassandra$execute_cql_query_result.read(Cassandra.java:33485)
    at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)
    at org.apache.cassandra.thrift.Cassandra$Client.recv_execute_cql_query(Cassandra.java:1402)
    at org.apache.cassandra.thrift.Cassandra$Client.execute_cql_query(Cassandra.java:1388)
    at org.apache.cassandra.cql.jdbc.CassandraConnection.execute(CassandraConnection.java:392)
    at org.apache.cassandra.cql.jdbc.CassandraConnection.execute(CassandraConnection.java:416)
    at org.apache.cassandra.cql.jdbc.CassandraStatement.doExecute(CassandraStatement.java:161)
    ... 3 more

1 个答案:

答案 0 :(得分:1)

没有回溯,很难回应。但是你似乎在另一台服务器上使用Cassandra而不是本地主机。你有没有配置Cassandra的收听地址?默认情况下,它仅侦听localhost。

修改

cassandra.yaml中,您必须更改listen_addressrpc_address。仅针对测试用例,您可以使用:0.0.0.0

如果您在Cassandra API中查看UnavailableException,则可以阅读:

  

<强>用UnavailableException       并非所有复制品都可以创建和/或读取。

您可能正在使用一致性ALL,其中一个节点已关闭或类似。