我不确定我是否遗漏了一些东西,但是当由于OutOfMemoryError导致cassandra节点出现故障时,我的DataStax Java驱动程序没有检测到它并仍然向它发送读取请求 . 如果我手动将节点关闭,那么它的工作正常 . 我正在使用默认值来重新连接和重试策略:
LoadBalancingPolicy loadBalancingPolicy;
if (datacenter != null) {
loadBalancingPolicy = new DCAwareRoundRobinPolicy(datacenter);
} else {
loadBalancingPolicy = new RoundRobinPolicy();
}
loadBalancingPolicy = new TokenAwarePolicy(loadBalancingPolicy);
loadBalancingPolicy = LatencyAwarePolicy.builder(loadBalancingPolicy).build();
Builder builder = Cluster.builder().addContactPoints(endpoints).withLoadBalancingPolicy(loadBalancingPolicy);
有什么建议?
1 回答
根据你的描述,我收集了Cassandra节点OOM,但没有退出)我怀疑如果真的发生故障,驱动程序会检测到它 . 如果那个's the case, I would argue that it'服务器的行为错误,而且Cassandra确实没有像OOM那样快速死亡(或根本没有),请参阅CASSANDRA-7507 .
也就是说,当Cassandra行为不端时,司机应该更好地保护你,并且会在JAVA-426之后得到改善 .