Skip to content

Commit c2c0901

Browse files
authored
Remove desired node historical features (#116951)
1 parent e5209f9 commit c2c0901

File tree

7 files changed

+5
-168
lines changed

7 files changed

+5
-168
lines changed

qa/rolling-upgrade/src/javaRestTest/java/org/elasticsearch/upgrades/DesiredNodesUpgradeIT.java

Lines changed: 4 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import org.elasticsearch.Build;
1515
import org.elasticsearch.action.admin.cluster.desirednodes.UpdateDesiredNodesRequest;
1616
import org.elasticsearch.client.Request;
17-
import org.elasticsearch.client.ResponseException;
1817
import org.elasticsearch.cluster.metadata.DesiredNode;
1918
import org.elasticsearch.cluster.metadata.DesiredNodeWithStatus;
2019
import org.elasticsearch.common.Strings;
@@ -42,22 +41,7 @@ public DesiredNodesUpgradeIT(@Name("upgradedNodes") int upgradedNodes) {
4241
desiredNodesVersion = upgradedNodes + 1;
4342
}
4443

45-
private enum ProcessorsPrecision {
46-
DOUBLE,
47-
FLOAT
48-
}
49-
5044
public void testUpgradeDesiredNodes() throws Exception {
51-
if (oldClusterHasFeature(DesiredNode.DOUBLE_PROCESSORS_SUPPORTED)) {
52-
assertUpgradedNodesCanReadDesiredNodes();
53-
} else if (oldClusterHasFeature(DesiredNode.RANGE_FLOAT_PROCESSORS_SUPPORTED)) {
54-
assertDesiredNodesUpdatedWithRoundedUpFloatsAreIdempotent();
55-
} else {
56-
assertDesiredNodesWithFloatProcessorsAreRejectedInOlderVersions();
57-
}
58-
}
59-
60-
private void assertUpgradedNodesCanReadDesiredNodes() throws Exception {
6145
if (isMixedCluster() || isUpgradedCluster()) {
6246
final Map<String, Object> desiredNodes = getLatestDesiredNodes();
6347
final String historyId = extractValue(desiredNodes, "history_id");
@@ -66,60 +50,10 @@ private void assertUpgradedNodesCanReadDesiredNodes() throws Exception {
6650
assertThat(version, is(equalTo(desiredNodesVersion - 1)));
6751
}
6852

69-
addClusterNodesToDesiredNodesWithProcessorsOrProcessorRanges(desiredNodesVersion, ProcessorsPrecision.DOUBLE);
53+
addClusterNodesToDesiredNodesWithProcessorsOrProcessorRanges(desiredNodesVersion);
7054
assertAllDesiredNodesAreActualized();
7155
}
7256

73-
private void assertDesiredNodesUpdatedWithRoundedUpFloatsAreIdempotent() throws Exception {
74-
// We define the same set of desired nodes to ensure that they are equal across all
75-
// the test runs, otherwise we cannot guarantee an idempotent update in this test
76-
final var desiredNodes = getNodeNames().stream()
77-
.map(
78-
nodeName -> new DesiredNode(
79-
Settings.builder().put(NODE_NAME_SETTING.getKey(), nodeName).build(),
80-
1238.49922909,
81-
ByteSizeValue.ofGb(32),
82-
ByteSizeValue.ofGb(128),
83-
clusterHasFeature(DesiredNode.DESIRED_NODE_VERSION_DEPRECATED) ? null : Build.current().version()
84-
)
85-
)
86-
.toList();
87-
88-
if (isMixedCluster()) {
89-
updateDesiredNodes(desiredNodes, desiredNodesVersion - 1);
90-
}
91-
for (int i = 0; i < 2; i++) {
92-
updateDesiredNodes(desiredNodes, desiredNodesVersion);
93-
}
94-
95-
final Map<String, Object> latestDesiredNodes = getLatestDesiredNodes();
96-
final int latestDesiredNodesVersion = extractValue(latestDesiredNodes, "version");
97-
assertThat(latestDesiredNodesVersion, is(equalTo(desiredNodesVersion)));
98-
99-
if (isUpgradedCluster()) {
100-
assertAllDesiredNodesAreActualized();
101-
}
102-
}
103-
104-
private void assertDesiredNodesWithFloatProcessorsAreRejectedInOlderVersions() throws Exception {
105-
if (isOldCluster()) {
106-
addClusterNodesToDesiredNodesWithIntegerProcessors(1);
107-
} else if (isMixedCluster()) {
108-
// Processor ranges or float processors are forbidden during upgrades: 8.2 -> 8.3 clusters
109-
final var responseException = expectThrows(
110-
ResponseException.class,
111-
() -> addClusterNodesToDesiredNodesWithProcessorsOrProcessorRanges(desiredNodesVersion, ProcessorsPrecision.FLOAT)
112-
);
113-
final var statusCode = responseException.getResponse().getStatusLine().getStatusCode();
114-
assertThat(statusCode, is(equalTo(400)));
115-
} else {
116-
assertAllDesiredNodesAreActualized();
117-
addClusterNodesToDesiredNodesWithProcessorsOrProcessorRanges(4, ProcessorsPrecision.FLOAT);
118-
}
119-
120-
getLatestDesiredNodes();
121-
}
122-
12357
private Map<String, Object> getLatestDesiredNodes() throws IOException {
12458
final var getDesiredNodesRequest = new Request("GET", "/_internal/desired_nodes/_latest");
12559
final var response = client().performRequest(getDesiredNodesRequest);
@@ -140,15 +74,14 @@ private void assertAllDesiredNodesAreActualized() throws Exception {
14074
}
14175
}
14276

143-
private void addClusterNodesToDesiredNodesWithProcessorsOrProcessorRanges(int version, ProcessorsPrecision processorsPrecision)
144-
throws Exception {
77+
private void addClusterNodesToDesiredNodesWithProcessorsOrProcessorRanges(int version) throws Exception {
14578
final List<DesiredNode> nodes;
14679
if (randomBoolean()) {
14780
nodes = getNodeNames().stream()
14881
.map(
14982
nodeName -> new DesiredNode(
15083
Settings.builder().put(NODE_NAME_SETTING.getKey(), nodeName).build(),
151-
processorsPrecision == ProcessorsPrecision.DOUBLE ? randomDoubleProcessorCount() : 0.5f,
84+
randomDoubleProcessorCount(),
15285
ByteSizeValue.ofGb(randomIntBetween(10, 24)),
15386
ByteSizeValue.ofGb(randomIntBetween(128, 256)),
15487
clusterHasFeature(DesiredNode.DESIRED_NODE_VERSION_DEPRECATED) ? null : Build.current().version()
@@ -157,9 +90,7 @@ private void addClusterNodesToDesiredNodesWithProcessorsOrProcessorRanges(int ve
15790
.toList();
15891
} else {
15992
nodes = getNodeNames().stream().map(nodeName -> {
160-
double minProcessors = processorsPrecision == ProcessorsPrecision.DOUBLE
161-
? randomDoubleProcessorCount()
162-
: randomFloatProcessorCount();
93+
double minProcessors = randomDoubleProcessorCount();
16394
return new DesiredNode(
16495
Settings.builder().put(NODE_NAME_SETTING.getKey(), nodeName).build(),
16596
new DesiredNode.ProcessorsRange(minProcessors, minProcessors + randomIntBetween(10, 20)),
@@ -172,21 +103,6 @@ private void addClusterNodesToDesiredNodesWithProcessorsOrProcessorRanges(int ve
172103
updateDesiredNodes(nodes, version);
173104
}
174105

175-
private void addClusterNodesToDesiredNodesWithIntegerProcessors(int version) throws Exception {
176-
final var nodes = getNodeNames().stream()
177-
.map(
178-
nodeName -> new DesiredNode(
179-
Settings.builder().put(NODE_NAME_SETTING.getKey(), nodeName).build(),
180-
randomIntBetween(1, 24),
181-
ByteSizeValue.ofGb(randomIntBetween(10, 24)),
182-
ByteSizeValue.ofGb(randomIntBetween(128, 256)),
183-
clusterHasFeature(DesiredNode.DESIRED_NODE_VERSION_DEPRECATED) ? null : Build.current().version()
184-
)
185-
)
186-
.toList();
187-
updateDesiredNodes(nodes, version);
188-
}
189-
190106
private void updateDesiredNodes(List<DesiredNode> nodes, int version) throws IOException {
191107
final var request = new Request("PUT", "/_internal/desired_nodes/upgrade_test/" + version);
192108
try (var builder = JsonXContent.contentBuilder()) {
@@ -223,10 +139,6 @@ private double randomDoubleProcessorCount() {
223139
return randomDoubleBetween(0.5, 512.1234, true);
224140
}
225141

226-
private float randomFloatProcessorCount() {
227-
return randomIntBetween(1, 512) + randomFloat();
228-
}
229-
230142
@SuppressWarnings("unchecked")
231143
private static <T> T extractValue(Map<String, Object> map, String path) {
232144
return (T) XContentMapValues.extractValue(path, map);

server/src/main/java/org/elasticsearch/action/admin/cluster/desirednodes/TransportUpdateDesiredNodesAction.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import org.elasticsearch.cluster.block.ClusterBlockException;
2121
import org.elasticsearch.cluster.block.ClusterBlockLevel;
2222
import org.elasticsearch.cluster.desirednodes.VersionConflictException;
23-
import org.elasticsearch.cluster.metadata.DesiredNode;
2423
import org.elasticsearch.cluster.metadata.DesiredNodes;
2524
import org.elasticsearch.cluster.metadata.DesiredNodesMetadata;
2625
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
@@ -99,22 +98,6 @@ protected void masterOperation(
9998
);
10099
}
101100

102-
@Override
103-
protected void doExecute(Task task, UpdateDesiredNodesRequest request, ActionListener<UpdateDesiredNodesResponse> listener) {
104-
if (request.clusterHasRequiredFeatures(nf -> featureService.clusterHasFeature(clusterService.state(), nf)) == false) {
105-
listener.onFailure(
106-
new IllegalArgumentException(
107-
"Unable to use processor ranges, floating-point (with greater precision) processors "
108-
+ "in mixed-clusters with nodes that do not support feature "
109-
+ DesiredNode.RANGE_FLOAT_PROCESSORS_SUPPORTED.id()
110-
)
111-
);
112-
return;
113-
}
114-
115-
super.doExecute(task, request, listener);
116-
}
117-
118101
static ClusterState replaceDesiredNodes(ClusterState clusterState, DesiredNodes newDesiredNodes) {
119102
return clusterState.copyAndUpdateMetadata(
120103
metadata -> metadata.putCustom(DesiredNodesMetadata.TYPE, new DesiredNodesMetadata(newDesiredNodes))

server/src/main/java/org/elasticsearch/action/admin/cluster/desirednodes/UpdateDesiredNodesRequest.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,13 @@
1818
import org.elasticsearch.common.io.stream.StreamInput;
1919
import org.elasticsearch.common.io.stream.StreamOutput;
2020
import org.elasticsearch.core.TimeValue;
21-
import org.elasticsearch.features.NodeFeature;
2221
import org.elasticsearch.xcontent.ConstructingObjectParser;
2322
import org.elasticsearch.xcontent.ParseField;
2423
import org.elasticsearch.xcontent.XContentParser;
2524

2625
import java.io.IOException;
2726
import java.util.List;
2827
import java.util.Objects;
29-
import java.util.function.Predicate;
3028

3129
public class UpdateDesiredNodesRequest extends AcknowledgedRequest<UpdateDesiredNodesRequest> {
3230
private static final TransportVersion DRY_RUN_VERSION = TransportVersions.V_8_4_0;
@@ -117,11 +115,6 @@ public boolean isDryRun() {
117115
return dryRun;
118116
}
119117

120-
public boolean clusterHasRequiredFeatures(Predicate<NodeFeature> clusterHasFeature) {
121-
return clusterHasFeature.test(DesiredNode.RANGE_FLOAT_PROCESSORS_SUPPORTED)
122-
|| nodes.stream().allMatch(n -> n.clusterHasRequiredFeatures(clusterHasFeature));
123-
}
124-
125118
@Override
126119
public boolean equals(Object o) {
127120
if (this == o) return true;

server/src/main/java/org/elasticsearch/cluster/metadata/DesiredNode.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import java.util.Objects;
3838
import java.util.Set;
3939
import java.util.TreeSet;
40-
import java.util.function.Predicate;
4140
import java.util.regex.Pattern;
4241

4342
import static java.lang.String.format;
@@ -48,7 +47,6 @@
4847
public final class DesiredNode implements Writeable, ToXContentObject, Comparable<DesiredNode> {
4948

5049
public static final NodeFeature RANGE_FLOAT_PROCESSORS_SUPPORTED = new NodeFeature("desired_node.range_float_processors");
51-
public static final NodeFeature DOUBLE_PROCESSORS_SUPPORTED = new NodeFeature("desired_node.double_processors");
5250
public static final NodeFeature DESIRED_NODE_VERSION_DEPRECATED = new NodeFeature("desired_node.version_deprecated");
5351

5452
public static final TransportVersion RANGE_FLOAT_PROCESSORS_SUPPORT_TRANSPORT_VERSION = TransportVersions.V_8_3_0;
@@ -348,10 +346,6 @@ public Set<DiscoveryNodeRole> getRoles() {
348346
return roles;
349347
}
350348

351-
public boolean clusterHasRequiredFeatures(Predicate<NodeFeature> clusterHasFeature) {
352-
return (processorsRange == null && processors.hasDecimals() == false) || clusterHasFeature.test(RANGE_FLOAT_PROCESSORS_SUPPORTED);
353-
}
354-
355349
@Override
356350
public boolean equals(Object o) {
357351
if (this == o) return true;

server/src/main/java/org/elasticsearch/cluster/metadata/MetadataFeatures.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,12 @@
99

1010
package org.elasticsearch.cluster.metadata;
1111

12-
import org.elasticsearch.Version;
1312
import org.elasticsearch.features.FeatureSpecification;
1413
import org.elasticsearch.features.NodeFeature;
1514

16-
import java.util.Map;
1715
import java.util.Set;
1816

1917
public class MetadataFeatures implements FeatureSpecification {
20-
@Override
21-
public Map<NodeFeature, Version> getHistoricalFeatures() {
22-
return Map.of(
23-
DesiredNode.RANGE_FLOAT_PROCESSORS_SUPPORTED,
24-
Version.V_8_3_0,
25-
DesiredNode.DOUBLE_PROCESSORS_SUPPORTED,
26-
Version.V_8_5_0
27-
);
28-
}
29-
3018
@Override
3119
public Set<NodeFeature> getFeatures() {
3220
return Set.of(DesiredNode.DESIRED_NODE_VERSION_DEPRECATED);

server/src/test/java/org/elasticsearch/cluster/metadata/DesiredNodeTests.java

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -185,38 +185,6 @@ public void testNodeCPUsRoundUp() {
185185
}
186186
}
187187

188-
public void testDesiredNodeHasRangeFloatProcessors() {
189-
final var settings = Settings.builder().put(NODE_NAME_SETTING.getKey(), randomAlphaOfLength(10)).build();
190-
191-
{
192-
final var desiredNode = new DesiredNode(
193-
settings,
194-
new DesiredNode.ProcessorsRange(0.4, 1.2),
195-
ByteSizeValue.ofGb(1),
196-
ByteSizeValue.ofGb(1)
197-
);
198-
assertThat(desiredNode.clusterHasRequiredFeatures(DesiredNode.RANGE_FLOAT_PROCESSORS_SUPPORTED::equals), is(true));
199-
assertThat(desiredNode.clusterHasRequiredFeatures(nf -> false), is(false));
200-
}
201-
202-
{
203-
final var desiredNode = new DesiredNode(
204-
settings,
205-
randomIntBetween(0, 10) + randomDoubleBetween(0.00001, 0.99999, true),
206-
ByteSizeValue.ofGb(1),
207-
ByteSizeValue.ofGb(1)
208-
);
209-
assertThat(desiredNode.clusterHasRequiredFeatures(DesiredNode.RANGE_FLOAT_PROCESSORS_SUPPORTED::equals), is(true));
210-
assertThat(desiredNode.clusterHasRequiredFeatures(nf -> false), is(false));
211-
}
212-
213-
{
214-
final var desiredNode = new DesiredNode(settings, 2.0f, ByteSizeValue.ofGb(1), ByteSizeValue.ofGb(1));
215-
assertThat(desiredNode.clusterHasRequiredFeatures(DesiredNode.RANGE_FLOAT_PROCESSORS_SUPPORTED::equals), is(true));
216-
assertThat(desiredNode.clusterHasRequiredFeatures(nf -> false), is(true));
217-
}
218-
}
219-
220188
public void testEqualsOrProcessorsCloseTo() {
221189
final Settings settings = Settings.builder().put(NODE_NAME_SETTING.getKey(), randomAlphaOfLength(10)).build();
222190
final double maxDelta = 1E-3;

test/metadata-extractor/src/test/java/org/elasticsearch/extractor/features/HistoricalFeaturesMetadataExtractorTests.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import java.util.Set;
2828

2929
import static org.elasticsearch.xcontent.XContentParserConfiguration.EMPTY;
30-
import static org.hamcrest.Matchers.anEmptyMap;
3130
import static org.hamcrest.Matchers.containsInAnyOrder;
3231
import static org.hamcrest.Matchers.empty;
3332
import static org.hamcrest.Matchers.hasEntry;
@@ -48,7 +47,7 @@ public void testExtractHistoricalMetadata() throws IOException {
4847
nodeFeatureVersionMap.putAll(historical);
4948
featureNamesSet.addAll(names);
5049
});
51-
assertThat(nodeFeatureVersionMap, not(anEmptyMap()));
50+
// assertThat(nodeFeatureVersionMap, not(anEmptyMap()));
5251
assertThat(featureNamesSet, not(empty()));
5352
assertThat(featureNamesSet, hasItem("test_features_enabled"));
5453

0 commit comments

Comments
 (0)