3434
3535import java .util .Collections ;
3636import java .util .HashSet ;
37+ import java .util .LinkedHashSet ;
3738import java .util .List ;
3839import java .util .Random ;
3940import java .util .Set ;
@@ -61,7 +62,7 @@ public class ClusterBootstrapService {
6162 static final String BOOTSTRAP_PLACEHOLDER_PREFIX = "{bootstrap-placeholder}" ;
6263
6364 private static final Logger logger = LogManager .getLogger (ClusterBootstrapService .class );
64- private final List <String > initialMasterNodes ;
65+ private final Set <String > initialMasterNodes ;
6566 @ Nullable // null if discoveryIsConfigured()
6667 private final TimeValue unconfiguredBootstrapTimeout ;
6768 private final TransportService transportService ;
@@ -74,7 +75,13 @@ public class ClusterBootstrapService {
7475 public ClusterBootstrapService (Settings settings , TransportService transportService , Random random ,
7576 Supplier <Iterable <DiscoveryNode >> discoveredNodesSupplier , BooleanSupplier isBootstrappedSupplier ,
7677 Consumer <VotingConfiguration > votingConfigurationConsumer ) {
77- initialMasterNodes = INITIAL_MASTER_NODES_SETTING .get (settings );
78+ final List <String > initialMasterNodesList = INITIAL_MASTER_NODES_SETTING .get (settings );
79+ this .initialMasterNodes = new LinkedHashSet <>(initialMasterNodesList );
80+ if (this .initialMasterNodes .size () != initialMasterNodesList .size ()) {
81+ throw new IllegalArgumentException (
82+ "setting [" + INITIAL_MASTER_NODES_SETTING .getKey () + "] contains duplicates: " + initialMasterNodesList );
83+ }
84+
7885 unconfiguredBootstrapTimeout = discoveryIsConfigured (settings ) ? null : UNCONFIGURED_BOOTSTRAP_TIMEOUT_SETTING .get (settings );
7986 this .transportService = transportService ;
8087 this .random = random ;
0 commit comments