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
}