metadata.getTokenRanges()是否返回cassandra中所有节点上的所有令牌范围?

时间:2019-01-22 11:39:35

标签: cassandra datastax-enterprise cassandra-3.0

我经历了Is there a way to see token ranges for each node in cassandra which uses vnodes?。在此实现中,我们获取所有主机并获取这些单个主机中的令牌范围,以获取所有节点上的所有令牌范围。

但是,就我而言,我正在使用以下代码:

public static synchronized List<Object[]> getTokenRangesAcrossNodes(
      final String node, final Integer port, final String userName, final String password) {

    if (cluster == null) {
      connect(node, port, userName, password);
    }
    Metadata metadata = cluster.getMetadata();
    return unwrapTokenRanges(new ArrayList<>(metadata.getTokenRanges()));
  }

在上面的connect()函数node中,所有逗号分隔的cassandra主机字符串都有,我使用Cluster.builder()。addContactPoints()创建会话。

我的问题是:

  1. metadata.getTokenRanges()是否提供所有主机上的所有令牌范围?还是我需要获取所有主机并获取每个主机的令牌范围?
  2. 在所有节点上获取令牌范围是否与给定keyspace的令牌范围不同?

Cassandra版本:3。*

1 个答案:

答案 0 :(得分:0)

每个主机都通过getTokens()公开其主要令牌。

Metadata.getTokenRanges()返回定义环中数据分布的令牌范围。

您还可以选择使用Metadata.getTokenRanges(String keyspace,Host host),它返回在给定主机上为特定键空间复制的令牌范围。

检查以下链接:

this example可能会有所帮助。