【问题标题】:Automatic failover for Datastax java driver not working for OutOfMemoryError node failureDatastax java驱动程序的自动故障转移不适用于OutOfMemoryError节点故障
【发布时间】:2014-10-13 11:59:07
【问题描述】:

我不确定我是否遗漏了一些东西,但是每当一个 cassandra 节点由于 OutOfMemoryError 而关闭时,我的 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);

有什么建议吗?

【问题讨论】:

    标签: java cassandra datastax-java-driver


    【解决方案1】:

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

    根据您的描述,我推测 Cassandra 节点 OOM,但并没有真正关闭(进程没有退出),我怀疑如果它真的关闭了,驱动程序会检测到它。如果是这种情况,我会争辩说这是服务器的错误行为,实际上 Cassandra 在 OOM 上并没有(或根本没有)死得那么快,请参阅CASSANDRA-7507。

    也就是说,当 Cassandra 行为不端时,驱动程序应该更好地保护您,JAVA-426 将改善这一点。

    【讨论】:

      猜你喜欢
      • 2015-08-07
      • 2016-03-01
      • 2015-03-21
      • 2016-03-19
      • 1970-01-01
      • 2013-04-25
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多