Skip to content

Commit 0e3f379

Browse files
authored
Skip bootstrap checks on snapshot builds (#128448)
Today we determine whether bootstrap checks are enforced (in production builds) based on whether a non-loopback address is configured. This PR we should expand that to also not enforce bootstrap checks when a snapshot build is used, so that is enforceLimits = non-loopback && non-snapshot Fixes #118328
1 parent 7690f46 commit 0e3f379

File tree

3 files changed

+38
-7
lines changed

3 files changed

+38
-7
lines changed

server/src/main/java/org/elasticsearch/bootstrap/BootstrapChecks.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.apache.logging.log4j.LogManager;
1313
import org.apache.logging.log4j.Logger;
1414
import org.apache.lucene.util.Constants;
15+
import org.elasticsearch.Build;
1516
import org.elasticsearch.cluster.coordination.ClusterBootstrapService;
1617
import org.elasticsearch.common.ReferenceDocs;
1718
import org.elasticsearch.common.settings.Setting;
@@ -37,6 +38,7 @@
3738
import java.util.Collections;
3839
import java.util.List;
3940
import java.util.Locale;
41+
import java.util.function.BooleanSupplier;
4042
import java.util.function.Predicate;
4143
import java.util.stream.Collectors;
4244
import java.util.stream.Stream;
@@ -75,7 +77,11 @@ static void check(
7577
combinedChecks.addAll(additionalChecks);
7678
check(
7779
context,
78-
enforceLimits(boundTransportAddress, DiscoveryModule.DISCOVERY_TYPE_SETTING.get(context.settings())),
80+
enforceLimits(
81+
boundTransportAddress,
82+
DiscoveryModule.DISCOVERY_TYPE_SETTING.get(context.settings()),
83+
Build.current()::isSnapshot
84+
),
7985
Collections.unmodifiableList(combinedChecks)
8086
);
8187
}
@@ -172,17 +178,23 @@ static void log(final Logger logger, final String error) {
172178
}
173179

174180
/**
175-
* Tests if the checks should be enforced.
181+
* Tests if the checks should be enforced. \
182+
* Bootstrap checks are enforced (in production builds) if a non-loopback address is configured and a non-snapshot build is used.
176183
*
177184
* @param boundTransportAddress the node network bindings
178185
* @param discoveryType the discovery type
186+
* @param isSnapshot provider to test if this build is snapshot or not
179187
* @return {@code true} if the checks should be enforced
180188
*/
181-
static boolean enforceLimits(final BoundTransportAddress boundTransportAddress, final String discoveryType) {
189+
static boolean enforceLimits(
190+
final BoundTransportAddress boundTransportAddress,
191+
final String discoveryType,
192+
final BooleanSupplier isSnapshot
193+
) {
182194
final Predicate<TransportAddress> isLoopbackAddress = t -> t.address().getAddress().isLoopbackAddress();
183195
final boolean bound = (Arrays.stream(boundTransportAddress.boundAddresses()).allMatch(isLoopbackAddress)
184196
&& isLoopbackAddress.test(boundTransportAddress.publishAddress())) == false;
185-
return bound && SINGLE_NODE_DISCOVERY_TYPE.equals(discoveryType) == false;
197+
return bound && isSnapshot.getAsBoolean() == false && SINGLE_NODE_DISCOVERY_TYPE.equals(discoveryType) == false;
186198
}
187199

188200
// the list of checks to execute

server/src/main/java/org/elasticsearch/plugins/internal/SettingsExtension.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public interface SettingsExtension {
2525
List<Setting<?>> getSettings();
2626

2727
/**
28-
* Loads a single BuildExtension, or returns {@code null} if none are found.
28+
* Loads a single SettingsExtension, or returns {@code null} if none are found.
2929
*/
3030
static List<SettingsExtension> load() {
3131
var loader = ServiceLoader.load(SettingsExtension.class);

server/src/test/java/org/elasticsearch/bootstrap/BootstrapChecksTests.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,16 @@
3636
import java.util.concurrent.atomic.AtomicReference;
3737
import java.util.function.Consumer;
3838

39+
import static java.lang.Boolean.FALSE;
40+
import static java.lang.Boolean.TRUE;
3941
import static org.elasticsearch.discovery.DiscoveryModule.MULTI_NODE_DISCOVERY_TYPE;
4042
import static org.elasticsearch.discovery.DiscoveryModule.SINGLE_NODE_DISCOVERY_TYPE;
4143
import static org.hamcrest.CoreMatchers.allOf;
4244
import static org.hamcrest.CoreMatchers.containsString;
4345
import static org.hamcrest.CoreMatchers.equalTo;
4446
import static org.hamcrest.CoreMatchers.instanceOf;
4547
import static org.hamcrest.Matchers.hasToString;
48+
import static org.hamcrest.Matchers.is;
4649
import static org.hamcrest.Matchers.not;
4750
import static org.mockito.Mockito.mock;
4851
import static org.mockito.Mockito.verify;
@@ -103,7 +106,7 @@ public void testEnforceLimitsWhenBoundToNonLocalAddress() {
103106
final String discoveryType = randomFrom(MULTI_NODE_DISCOVERY_TYPE, SINGLE_NODE_DISCOVERY_TYPE);
104107

105108
assertEquals(
106-
BootstrapChecks.enforceLimits(boundTransportAddress, discoveryType),
109+
BootstrapChecks.enforceLimits(boundTransportAddress, discoveryType, FALSE::booleanValue),
107110
SINGLE_NODE_DISCOVERY_TYPE.equals(discoveryType) == false
108111
);
109112
}
@@ -124,11 +127,27 @@ public void testEnforceLimitsWhenPublishingToNonLocalAddress() {
124127
final String discoveryType = randomFrom(MULTI_NODE_DISCOVERY_TYPE, SINGLE_NODE_DISCOVERY_TYPE);
125128

126129
assertEquals(
127-
BootstrapChecks.enforceLimits(boundTransportAddress, discoveryType),
130+
BootstrapChecks.enforceLimits(boundTransportAddress, discoveryType, FALSE::booleanValue),
128131
SINGLE_NODE_DISCOVERY_TYPE.equals(discoveryType) == false
129132
);
130133
}
131134

135+
public void testDoNotEnforceLimitsWhenSnapshotBuild() {
136+
final List<TransportAddress> transportAddresses = new ArrayList<>();
137+
138+
for (int i = 0; i < randomIntBetween(1, 8); i++) {
139+
final TransportAddress randomTransportAddress = buildNewFakeTransportAddress();
140+
transportAddresses.add(randomTransportAddress);
141+
}
142+
143+
final TransportAddress publishAddress = new TransportAddress(InetAddress.getLoopbackAddress(), 0);
144+
final BoundTransportAddress boundTransportAddress = mock(BoundTransportAddress.class);
145+
when(boundTransportAddress.boundAddresses()).thenReturn(transportAddresses.toArray(new TransportAddress[0]));
146+
when(boundTransportAddress.publishAddress()).thenReturn(publishAddress);
147+
148+
assertThat(BootstrapChecks.enforceLimits(boundTransportAddress, MULTI_NODE_DISCOVERY_TYPE, TRUE::booleanValue), is(false));
149+
}
150+
132151
public void testExceptionAggregation() {
133152
final List<BootstrapCheck> checks = Arrays.asList(new BootstrapCheck() {
134153
@Override

0 commit comments

Comments
 (0)