首页 > 解决方案 > com.datastax.driver.core.Metadata:getHosts() 返回不正确的状态

问题描述

为什么要为已关闭的主机com.datastax.driver.core.Metadata:getHosts()返回状态?UP

但是,nodetool status返回DN该主机。

无论我检查多少次Host.getState(),它仍然UP显示为那个死主机。

这就是我查询的方式Metadata

cluster = DseCluster.builder()
    .addContactPoints("192.168.1.1", "192.168.1.2", "192.168.1.3")
    .withPort(9042)
    .withReconnectionPolicy(new ConstantReconnectionPolicy(2000))
    .build();

cluster.getMetadata().getAllHosts();

编辑:更新代码以反映我正在尝试连接到 3 个主机。我应该说我连接的集群有 3 个节点,2 个在 DC1,另一个在 DC2。

此外,每当我重新启动运行此代码的 Java 进程时,行为都会发生变化。有时它给了我正确的状态,然后当我再次重新启动它时,它给了我错误的状态,等等。

标签: datastax-enterprisedatastax-java-driver

解决方案


我将发布从 datastaxacademy slack 获得的答案:

Host.getState()是驱动程序对它认为的主机状态的nodetool status看法,C* 节点认为集群中所有节点的状态在哪里(通过八卦传播) 没有办法通过驱动程序获得它


推荐阅读