diff options
Diffstat (limited to 'clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/HierarchicalGroupVisiting.java')
-rw-r--r-- | clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/HierarchicalGroupVisiting.java | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/HierarchicalGroupVisiting.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/HierarchicalGroupVisiting.java index 19ff51f4cc4..09f1824824c 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/HierarchicalGroupVisiting.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/HierarchicalGroupVisiting.java @@ -1,16 +1,38 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -// package com.yahoo.vespa.clustercontroller.core; +import com.yahoo.vdslib.distribution.Distribution; import com.yahoo.vdslib.distribution.GroupVisitor; -public interface HierarchicalGroupVisiting { - /** Returns true if the group contains more than one (leaf) group. */ - boolean isHierarchical(); +class HierarchicalGroupVisiting { + + private final Distribution distribution; + + public HierarchicalGroupVisiting(Distribution distribution) { + this.distribution = distribution; + } + + /** + * Returns true if the group contains more than one (leaf) group. + */ + public boolean isHierarchical() { + return !distribution.getRootGroup().isLeafGroup(); + } /** * Invoke the visitor for each leaf group of an implied group. If the group is non-hierarchical * (flat), the visitor will not be invoked. */ - void visit(GroupVisitor visitor); + public void visit(GroupVisitor visitor) { + if (isHierarchical()) { + distribution.visitGroups(group -> { + if (group.isLeafGroup()) { + return visitor.visitGroup(group); + } + + return true; + }); + } + } + } |