3434import java .util .Collections ;
3535import java .util .HashSet ;
3636import java .util .List ;
37+ import java .util .Optional ;
3738import java .util .Set ;
3839import java .util .concurrent .atomic .AtomicBoolean ;
3940import java .util .function .Consumer ;
@@ -84,18 +85,16 @@ void onFoundPeersUpdated() {
8485 if (transportService .getLocalNode ().isMasterNode () && initialMasterNodes .isEmpty () == false
8586 && nodes .stream ().noneMatch (Coordinator ::isZen1Node )) {
8687
87- final boolean waitRequirementsPassed ;
88+ final Optional < Set < DiscoveryNode >> nodesMatchingRequirements ;
8889 try {
89- waitRequirementsPassed = checkWaitRequirements (nodes );
90+ nodesMatchingRequirements = getNodesMatchingRequirements (nodes );
9091 } catch (IllegalStateException e ) {
9192 logger .warn ("bootstrapping cancelled" , e );
9293 bootstrappingPermitted .set (false );
9394 return ;
9495 }
9596
96- if (waitRequirementsPassed ) {
97- startBootstrap (nodes );
98- }
97+ nodesMatchingRequirements .ifPresent (this ::startBootstrap );
9998 }
10099 }
101100
@@ -160,14 +159,14 @@ private static boolean matchesRequirement(DiscoveryNode discoveryNode, String re
160159 || discoveryNode .getAddress ().getAddress ().equals (requirement );
161160 }
162161
163- private boolean checkWaitRequirements (Set <DiscoveryNode > nodes ) {
162+ private Optional < Set < DiscoveryNode >> getNodesMatchingRequirements (Set <DiscoveryNode > nodes ) {
164163 final Set <DiscoveryNode > selectedNodes = new HashSet <>();
165164 for (final String requirement : initialMasterNodes ) {
166165 final Set <DiscoveryNode > matchingNodes
167166 = nodes .stream ().filter (n -> matchesRequirement (n , requirement )).collect (Collectors .toSet ());
168167
169168 if (matchingNodes .isEmpty ()) {
170- return false ;
169+ return Optional . empty () ;
171170 }
172171 if (matchingNodes .size () > 1 ) {
173172 throw new IllegalStateException ("requirement [" + requirement + "] matches multiple nodes: " + matchingNodes );
@@ -181,6 +180,6 @@ private boolean checkWaitRequirements(Set<DiscoveryNode> nodes) {
181180 }
182181 }
183182
184- return true ;
183+ return Optional . of ( Collections . unmodifiableSet ( selectedNodes )) ;
185184 }
186185}
0 commit comments