2626import org .elasticsearch .xpack .core .DataTier ;
2727import org .elasticsearch .xpack .core .searchablesnapshots .SearchableSnapshotsConstants ;
2828
29- import java .util .Arrays ;
3029import java .util .Collection ;
3130import java .util .Iterator ;
3231import java .util .List ;
3332import java .util .Map ;
3433import java .util .Optional ;
3534import java .util .Set ;
3635import java .util .function .Function ;
37- import java .util .stream .Collectors ;
3836
3937import static org .elasticsearch .xpack .core .DataTier .DATA_FROZEN ;
4038
@@ -55,11 +53,11 @@ public class DataTierAllocationDecider extends AllocationDecider {
5553
5654 private static void validateTierSetting (String setting ) {
5755 if (Strings .hasText (setting )) {
58- Set < String > invalidTiers = Arrays . stream ( setting .split ("," ))
59- . filter ( tier -> DataTier .validTierName (tier ) == false )
60- . collect ( Collectors . toSet ());
61- if ( invalidTiers . size () > 0 ) {
62- throw new IllegalArgumentException ( "invalid tier names: " + invalidTiers );
56+ for ( String s : setting .split ("," )) {
57+ if ( DataTier .validTierName (s ) == false ) {
58+ throw new IllegalArgumentException (
59+ "invalid tier names found in [" + setting + "] allowed values are " + DataTier . ALL_DATA_TIERS );
60+ }
6361 }
6462 }
6563 }
@@ -90,8 +88,7 @@ public void validate(String value, Map<Setting<?>, Object> settings, boolean exi
9088 "] tier preference may be used for partial searchable snapshots (got: [" + value + "])" );
9189 }
9290 } else {
93- String [] split = value .split ("," );
94- if (Arrays .stream (split ).anyMatch (DATA_FROZEN ::equals )) {
91+ if (value .contains (DATA_FROZEN )) {
9592 throw new IllegalArgumentException ("[" + DATA_FROZEN + "] tier can only be used for partial searchable snapshots" );
9693 }
9794 }
@@ -180,27 +177,32 @@ private Decision shouldIndexPreferTier(IndexMetadata indexMetadata, Set<Discover
180177 * {@code Optional<String>}.
181178 */
182179 public static Optional <String > preferredAvailableTier (String prioritizedTiers , DiscoveryNodes nodes ) {
183- String [] tiers = parseTierList (prioritizedTiers );
184- return Arrays .stream (tiers ).filter (tier -> tierNodesPresent (tier , nodes )).findFirst ();
180+ for (String tier : parseTierList (prioritizedTiers )) {
181+ if (tierNodesPresent (tier , nodes )) {
182+ return Optional .of (tier );
183+ }
184+ }
185+ return Optional .empty ();
185186 }
186187
187188 public static String [] parseTierList (String tiers ) {
188189 if (Strings .hasText (tiers ) == false ) {
189190 // avoid parsing overhead in the null/empty string case
190191 return Strings .EMPTY_ARRAY ;
191192 } else {
192- return Strings . tokenizeToStringArray ( tiers , "," );
193+ return tiers . split ( "," );
193194 }
194195 }
195196
196197 static boolean tierNodesPresent (String singleTier , DiscoveryNodes nodes ) {
197198 assert singleTier .equals (DiscoveryNodeRole .DATA_ROLE .roleName ()) || DataTier .validTierName (singleTier ) :
198199 "tier " + singleTier + " is an invalid tier name" ;
199200 for (ObjectCursor <DiscoveryNode > node : nodes .getNodes ().values ()) {
200- if (node .value .getRoles ().stream ()
201- .map (DiscoveryNodeRole ::roleName )
202- .anyMatch (s -> s .equals (DiscoveryNodeRole .DATA_ROLE .roleName ()) || s .equals (singleTier ))) {
203- return true ;
201+ for (DiscoveryNodeRole discoveryNodeRole : node .value .getRoles ()) {
202+ String s = discoveryNodeRole .roleName ();
203+ if (s .equals (DiscoveryNodeRole .DATA_ROLE .roleName ()) || s .equals (singleTier )) {
204+ return true ;
205+ }
204206 }
205207 }
206208 return false ;
0 commit comments