从Datastax Cassandra Java驱动程序获取“写入尝试失效连接”错误

时间:2014-05-22 23:34:46

标签: java cassandra-2.0 datastax-java-driver

我有一个使用Cassandra 2.0和Datastax java驱动程序2.0.2的Web服务应用程序。当我尝试写入/读取数据库时,我有时会得到下面的堆栈跟踪,特别是如果应用程序已经在那里坐了一会儿(比如一夜之间)。当我重试时,此错误通常会消失,但是,有时它会持续存在,我必须重新启动Web应用程序以消除错误。

我想知道这是否是某种“陈旧连接”问题。但是,Datastax java驱动程序文档表明它应该保持连接活动。

我对错误消息进行了谷歌搜索,谷歌只给出了两次(!)点击。他们是相关的。这是google结果之一的答案:

  

Sylvain Lebresne 4月2日你遇到了   https://datastax-oss.atlassian.net/browse/JAVA-250。我们很快就会解决它   希望(我有一些半完成的补丁,我需要完成),但是   目前,如果您重新启动整个群集而不执行查询   重新安排,有时会发生这样的事情,你会在之前得到这个   群集正确重新连接。在此期间,作为一种解决方法,你   你总是可以确保在你做的时候运行一些简单的查询   群集重新启动以避免它。

然而,这看起来并不像我的场景,因为我们根本没有重新启动集群。我想知道是否有人对此错误有一些见解?

堆栈跟踪:

com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: ec2-54-197-xxx-xxx.compute-1.amazonaws.com/54.197.xxx.xxx:9042 (com.datastax.driver.core.ConnectionException: [ec2-54-197-xxx-xxx.compute-1.amazonaws.com/54.197.xxx.xxx:9042] Write attempt on defunct connection))
at com.datastax.driver.core.exceptions.NoHostAvailableException.copy(NoHostAvailableException.java:65)
at com.datastax.driver.core.DefaultResultSetFuture.extractCauseFromExecutionException(DefaultResultSetFuture.java:256)
at com.datastax.driver.core.DefaultResultSetFuture.getUninterruptibly(DefaultResultSetFuture.java:172)
at com.datastax.driver.core.SessionManager.execute(SessionManager.java:92)

1 个答案:

答案 0 :(得分:0)

我认为在我的开发机器上间歇性地完全相同的问题(在defunct连接上写入尝试)。

当我的开发机器在服务器启动时进入睡眠状态时,似乎会发生这种情况。显然,您正在运行的AWS群集中没有电源管理,但它会给您一个提示 - 关键是某些东西会破坏您的控制连接或间歇性地阻止主机之间的网络连接。

您应该在日志中看到重新连接线程: 21:34:51.616 [Reconnection-1] ERROR c.d.driver.core.ControlConnection - [控制连接]无法连接到任何主机,在2000毫秒内重试计划

此后的下一个请求将始终取决于我的经验。

TL; DR - 检查可能破坏控制连接的网络问题或任何间歇性关闭服务器。驱动程序应该更好地重建断开的控制连接,听起来他们正在为JAVA-250工作