package chord import ( "strconv" "strings" "go.miragespace.co/specter/spec/chord" ) func (n *LocalNode) ringTrace() string { var sb strings.Builder sb.WriteString(strconv.FormatUint(n.ID(), 10)) var err error var next chord.VNode = n seen := make(map[uint64]bool) for { next, err = n.FindSuccessor(chord.ModuloSum(next.ID(), 1)) if err != nil { sb.WriteString(" -> ") sb.WriteString("error") break } if next == nil { break } if next.ID() == n.ID() { sb.WriteString(" -> ") sb.WriteString(strconv.FormatUint(n.ID(), 10)) break } if seen[next.ID()] { return "unstable" } sb.WriteString(" -> ") sb.WriteString(strconv.FormatUint(next.ID(), 10)) seen[next.ID()] = true } return sb.String() }