Автоматический переход на другой ресурс для Java-драйвера Datastax не работает при сбое узла OutOfMemoryError

Я не уверен, что я что-то упустил, но всякий раз, когда узел cassandra выходит из строя из-за OutOfMemoryError, мой Java-драйвер DataStax не обнаруживает его и все еще отправляет ему запросы на чтение. Где он работает нормально, если я вручную отключу узел. Я использую значения по умолчанию для политик повторного подключения и повторных попыток:

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);

Какие-либо предложения?


person Heisenberg    schedule 20.08.2014    source источник


Ответы (1)


всякий раз, когда узел cassandra выходит из строя из-за OutOfMemoryError, мой Java-драйвер DataStax не обнаруживает его и все еще отправляет ему запросы на чтение.

Из вашего описания я понял, что узел Cassandra OOM, но на самом деле не отключается (процесс не завершается), и я подозреваю, что если бы он действительно отключился, драйвер бы это обнаружил. Если это так, я бы сказал, что это неправильное поведение сервера, и действительно Cassandra не умирает так быстро, как должна (или вообще не умирает) в OOM, см. CASSANDRA-7507.

Тем не менее, драйвер должен лучше защищать вас, когда Кассандра плохо себя ведет, и это будет улучшено с помощью JAVA-426.

person pcmanus    schedule 22.08.2014