func()

in store/cluster_node.go [176:207]


func (n *ClusterNode) GetClusterInfo(ctx context.Context) (*ClusterInfo, error) {
	infoStr, err := n.GetClient().ClusterInfo(ctx).Result()
	if err != nil {
		return nil, err
	}

	clusterInfo := &ClusterInfo{CurrentEpoch: -1}
	lines := strings.Split(infoStr, "\r\n")
	for _, line := range lines {
		fields := strings.Split(line, ":")
		if len(fields) != 2 {
			continue
		}
		fields[1] = strings.TrimSpace(fields[1])
		switch strings.ToLower(strings.TrimSpace(fields[0])) {
		case "cluster_current_epoch":
			clusterInfo.CurrentEpoch, err = strconv.ParseInt(fields[1], 10, 64)
			if err != nil {
				return nil, err
			}
		case "migrating_slot", "migrating_slot(s)":
			// TODO(@git-hulk): handle multiple migrating slots
			clusterInfo.MigratingSlot, err = ParseSlotRange(fields[1])
			if err != nil {
				return nil, err
			}
		case "migrating_state":
			clusterInfo.MigratingState = fields[1]
		}
	}
	return clusterInfo, nil
}