Datastax java驱动程序的自动故障转移不适用于OutOfMemoryError节点故障

时间:2014-08-20 07:51:26

标签: java cassandra datastax-java-driver

我不确定我是否遗漏了某些东西,但是当由于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 个答案:

答案 0 :(得分:1)

  

每当cassandra节点由于OutOfMemoryError而关闭时,我的DataStax Java驱动程序都没有检测到它并仍然向它发送读取请求。

从你的描述中,我收集了Cassandra节点OOM,但并没有真正关闭(进程没有退出),我怀疑如果真的发生故障,驱动程序会检测到它。如果是这种情况,我会认为这是来自服务器的错误行为,而且Cassandra确实不会在OOM上尽快(或者根本)死亡,请参阅CASSANDRA-7507

也就是说,当Cassandra行为不端时,司机应该更好地保护你,JAVA-426会改善。