Skip to content

Commit b0d185b

Browse files
authored
Remove deprecated gateway settings (#53845)
This commit removes the following deprecated settings in v8: - `gateway.expected_nodes` - `gateway.expected_master_nodes` - `gateway.recover_after_nodes` - `gateway.recover_after_master_nodes` Co-authored-by: ShawnLi1014 <[email protected]>
1 parent 86005de commit b0d185b

File tree

9 files changed

+61
-174
lines changed

9 files changed

+61
-174
lines changed

docs/reference/migration/migrate_8_0/settings.asciidoc

+22
Original file line numberDiff line numberDiff line change
@@ -144,3 +144,25 @@ may be set to false.
144144
Discontinue use of the removed settings. Specifying these settings in
145145
`elasticsearch.yml` will result in an error on startup.
146146
====
147+
148+
.Settings used to defer cluster recovery pending a certain number of master nodes have been removed.
149+
[%collapsible]
150+
====
151+
*Details* +
152+
The following settings were deprecated in {es} 7.8.0 and have been removed in
153+
{es} 8.0.0:
154+
155+
* `gateway.expected_nodes`
156+
* `gateway.expected_master_nodes`
157+
* `gateway.recover_after_nodes`
158+
* `gateway.recover_after_master_nodes`
159+
160+
It is safe to recover the cluster as soon as a majority of master-eligible
161+
nodes have joined so there is no benefit in waiting for any additional
162+
master-eligible nodes to start.
163+
164+
*Impact* +
165+
Discontinue use of the removed settings. If needed, use
166+
`gateway.expected_data_nodes` or `gateway.recover_after_data_nodes` to defer
167+
cluster recovery pending a certain number of data nodes.
168+
====

docs/reference/modules/gateway.asciidoc

+11-26
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,6 @@ recover the cluster state and the cluster's data.
1010

1111
NOTE: These settings only take effect on a full cluster restart.
1212

13-
`gateway.expected_nodes`::
14-
(<<static-cluster-setting,Static>>)
15-
deprecated:[7.7.0, This setting will be removed in 8.0. Use `gateway.expected_data_nodes` instead.]
16-
Number of data or master nodes expected in the cluster.
17-
Recovery of local shards begins when the expected number of
18-
nodes join the cluster. Defaults to `0`.
19-
20-
`gateway.expected_master_nodes`::
21-
(<<static-cluster-setting,Static>>)
22-
deprecated:[7.7.0, This setting will be removed in 8.0. Use `gateway.expected_data_nodes` instead.]
23-
Number of master nodes expected in the cluster.
24-
Recovery of local shards begins when the expected number of
25-
master nodes join the cluster. Defaults to `0`.
26-
2713
`gateway.expected_data_nodes`::
2814
(<<static-cluster-setting,Static>>)
2915
Number of data nodes expected in the cluster.
@@ -34,25 +20,24 @@ data nodes join the cluster. Defaults to `0`.
3420
(<<static-cluster-setting,Static>>)
3521
If the expected number of nodes is not achieved, the recovery process waits
3622
for the configured amount of time before trying to recover.
37-
Defaults to `5m` if one of the `expected_nodes` settings is configured.
23+
Defaults to `5m`.
3824
+
3925
Once the `recover_after_time` duration has timed out, recovery will start
40-
as long as the following conditions are met:
41-
42-
`gateway.recover_after_nodes`::
43-
(<<static-cluster-setting,Static>>)
44-
deprecated:[7.7.0, This setting will be removed in 8.0. Use `gateway.recover_after_data_nodes` instead.]
45-
Recover as long as this many data or master nodes have joined the cluster.
46-
47-
`gateway.recover_after_master_nodes`::
48-
(<<static-cluster-setting,Static>>)
49-
deprecated:[7.7.0, This setting will be removed in 8.0. Use `gateway.recover_after_data_nodes` instead.]
50-
Recover as long as this many master nodes have joined the cluster.
26+
as long as the following condition is met:
5127

5228
`gateway.recover_after_data_nodes`::
5329
(<<static-cluster-setting,Static>>)
5430
Recover as long as this many data nodes have joined the cluster.
5531

32+
These settings can be configured in `elasticsearch.yml` as follows:
33+
34+
[source,yaml]
35+
--------------------------------------------------
36+
gateway.expected_data_nodes: 3
37+
gateway.recover_after_time: 600s
38+
gateway.recover_after_data_nodes: 3
39+
--------------------------------------------------
40+
5641
[[dangling-indices]]
5742
==== Dangling indices
5843

server/src/internalClusterTest/java/org/elasticsearch/action/admin/cluster/stats/ClusterStatsIT.java

+4-7
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.elasticsearch.common.Priority;
1919
import org.elasticsearch.common.settings.Settings;
2020
import org.elasticsearch.common.util.concurrent.EsExecutors;
21+
import org.elasticsearch.gateway.GatewayService;
2122
import org.elasticsearch.monitor.os.OsStats;
2223
import org.elasticsearch.node.NodeRoleSettings;
2324
import org.elasticsearch.test.ESIntegTestCase;
@@ -225,16 +226,12 @@ public void testAllocatedProcessors() throws Exception {
225226
assertThat(response.getNodesStats().getOs().getAllocatedProcessors(), equalTo(nodeProcessors));
226227
}
227228

228-
public void testClusterStatusWhenStateNotRecovered() throws Exception {
229-
internalCluster().startMasterOnlyNode(Settings.builder().put("gateway.recover_after_nodes", 2).build());
229+
public void testClusterStatusWhenStateNotRecovered() {
230+
internalCluster().startMasterOnlyNode(Settings.builder().put(GatewayService.RECOVER_AFTER_DATA_NODES_SETTING.getKey(), 1).build());
230231
ClusterStatsResponse response = client().admin().cluster().prepareClusterStats().get();
231232
assertThat(response.getStatus(), equalTo(ClusterHealthStatus.RED));
232233

233-
if (randomBoolean()) {
234-
internalCluster().startMasterOnlyNode();
235-
} else {
236-
internalCluster().startDataOnlyNode();
237-
}
234+
internalCluster().startDataOnlyNode();
238235
// wait for the cluster status to settle
239236
ensureGreen();
240237
response = client().admin().cluster().prepareClusterStats().get();

server/src/internalClusterTest/java/org/elasticsearch/action/admin/cluster/tasks/PendingTasksBlocksIT.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,12 @@ public void testPendingTasksWithClusterNotRecoveredBlock() throws Exception {
6262
}
6363

6464
// restart the cluster but prevent it from performing state recovery
65-
final int nodeCount = client().admin().cluster().prepareNodesInfo("data:true", "master:true").get().getNodes().size();
65+
final int nodeCount = client().admin().cluster().prepareNodesInfo("data:true").get().getNodes().size();
6666
internalCluster().fullRestart(new InternalTestCluster.RestartCallback() {
6767
@Override
6868
public Settings onNodeStopped(String nodeName) {
6969
return Settings.builder()
70-
.put(GatewayService.RECOVER_AFTER_NODES_SETTING.getKey(), nodeCount + 1)
70+
.put(GatewayService.RECOVER_AFTER_DATA_NODES_SETTING.getKey(), nodeCount + 1)
7171
.build();
7272
}
7373

server/src/internalClusterTest/java/org/elasticsearch/gateway/RecoverAfterNodesIT.java

+6-68
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import java.util.Set;
2121

22+
import static org.elasticsearch.gateway.GatewayService.RECOVER_AFTER_DATA_NODES_SETTING;
2223
import static org.elasticsearch.test.NodeRoles.dataOnlyNode;
2324
import static org.elasticsearch.test.NodeRoles.masterOnlyNode;
2425
import static org.hamcrest.Matchers.equalTo;
@@ -44,79 +45,16 @@ public Client startNode(Settings.Builder settings) {
4445
return internalCluster().client(name);
4546
}
4647

47-
public void testRecoverAfterNodes() throws Exception {
48-
internalCluster().setBootstrapMasterNodeIndex(0);
49-
logger.info("--> start node (1)");
50-
Client clientNode1 = startNode(Settings.builder().put("gateway.recover_after_nodes", 3));
51-
assertThat(clientNode1.admin().cluster().prepareState().setLocal(true).execute().actionGet()
52-
.getState().blocks().global(ClusterBlockLevel.METADATA_WRITE),
53-
hasItem(GatewayService.STATE_NOT_RECOVERED_BLOCK));
54-
55-
logger.info("--> start node (2)");
56-
Client clientNode2 = startNode(Settings.builder().put("gateway.recover_after_nodes", 3));
57-
Thread.sleep(BLOCK_WAIT_TIMEOUT.millis());
58-
assertThat(clientNode1.admin().cluster().prepareState().setLocal(true).execute().actionGet()
59-
.getState().blocks().global(ClusterBlockLevel.METADATA_WRITE),
60-
hasItem(GatewayService.STATE_NOT_RECOVERED_BLOCK));
61-
assertThat(clientNode2.admin().cluster().prepareState().setLocal(true).execute().actionGet()
62-
.getState().blocks().global(ClusterBlockLevel.METADATA_WRITE),
63-
hasItem(GatewayService.STATE_NOT_RECOVERED_BLOCK));
64-
65-
logger.info("--> start node (3)");
66-
Client clientNode3 = startNode(Settings.builder().put("gateway.recover_after_nodes", 3));
67-
68-
assertThat(waitForNoBlocksOnNode(BLOCK_WAIT_TIMEOUT, clientNode1).isEmpty(), equalTo(true));
69-
assertThat(waitForNoBlocksOnNode(BLOCK_WAIT_TIMEOUT, clientNode2).isEmpty(), equalTo(true));
70-
assertThat(waitForNoBlocksOnNode(BLOCK_WAIT_TIMEOUT, clientNode3).isEmpty(), equalTo(true));
71-
}
72-
73-
public void testRecoverAfterMasterNodes() throws Exception {
74-
internalCluster().setBootstrapMasterNodeIndex(0);
75-
logger.info("--> start master_node (1)");
76-
Client master1 = startNode(Settings.builder().put("gateway.recover_after_master_nodes", 2).put(masterOnlyNode()));
77-
assertThat(master1.admin().cluster().prepareState().setLocal(true).execute().actionGet()
78-
.getState().blocks().global(ClusterBlockLevel.METADATA_WRITE),
79-
hasItem(GatewayService.STATE_NOT_RECOVERED_BLOCK));
80-
81-
logger.info("--> start data_node (1)");
82-
Client data1 = startNode(Settings.builder().put("gateway.recover_after_master_nodes", 2).put(dataOnlyNode()));
83-
assertThat(master1.admin().cluster().prepareState().setLocal(true).execute().actionGet()
84-
.getState().blocks().global(ClusterBlockLevel.METADATA_WRITE),
85-
hasItem(GatewayService.STATE_NOT_RECOVERED_BLOCK));
86-
assertThat(data1.admin().cluster().prepareState().setLocal(true).execute().actionGet()
87-
.getState().blocks().global(ClusterBlockLevel.METADATA_WRITE),
88-
hasItem(GatewayService.STATE_NOT_RECOVERED_BLOCK));
89-
90-
logger.info("--> start data_node (2)");
91-
Client data2 = startNode(Settings.builder().put("gateway.recover_after_master_nodes", 2).put(dataOnlyNode()));
92-
assertThat(master1.admin().cluster().prepareState().setLocal(true).execute().actionGet()
93-
.getState().blocks().global(ClusterBlockLevel.METADATA_WRITE),
94-
hasItem(GatewayService.STATE_NOT_RECOVERED_BLOCK));
95-
assertThat(data1.admin().cluster().prepareState().setLocal(true).execute().actionGet()
96-
.getState().blocks().global(ClusterBlockLevel.METADATA_WRITE),
97-
hasItem(GatewayService.STATE_NOT_RECOVERED_BLOCK));
98-
assertThat(data2.admin().cluster().prepareState().setLocal(true).execute().actionGet()
99-
.getState().blocks().global(ClusterBlockLevel.METADATA_WRITE),
100-
hasItem(GatewayService.STATE_NOT_RECOVERED_BLOCK));
101-
102-
logger.info("--> start master_node (2)");
103-
Client master2 = startNode(Settings.builder().put("gateway.recover_after_master_nodes", 2).put(masterOnlyNode()));
104-
assertThat(waitForNoBlocksOnNode(BLOCK_WAIT_TIMEOUT, master1).isEmpty(), equalTo(true));
105-
assertThat(waitForNoBlocksOnNode(BLOCK_WAIT_TIMEOUT, master2).isEmpty(), equalTo(true));
106-
assertThat(waitForNoBlocksOnNode(BLOCK_WAIT_TIMEOUT, data1).isEmpty(), equalTo(true));
107-
assertThat(waitForNoBlocksOnNode(BLOCK_WAIT_TIMEOUT, data2).isEmpty(), equalTo(true));
108-
}
109-
110-
public void testRecoverAfterDataNodes() throws Exception {
48+
public void testRecoverAfterDataNodes() {
11149
internalCluster().setBootstrapMasterNodeIndex(0);
11250
logger.info("--> start master_node (1)");
113-
Client master1 = startNode(Settings.builder().put("gateway.recover_after_data_nodes", 2).put(masterOnlyNode()));
51+
Client master1 = startNode(Settings.builder().put(RECOVER_AFTER_DATA_NODES_SETTING.getKey(), 2).put(masterOnlyNode()));
11452
assertThat(master1.admin().cluster().prepareState().setLocal(true).execute().actionGet()
11553
.getState().blocks().global(ClusterBlockLevel.METADATA_WRITE),
11654
hasItem(GatewayService.STATE_NOT_RECOVERED_BLOCK));
11755

11856
logger.info("--> start data_node (1)");
119-
Client data1 = startNode(Settings.builder().put("gateway.recover_after_data_nodes", 2).put(dataOnlyNode()));
57+
Client data1 = startNode(Settings.builder().put(RECOVER_AFTER_DATA_NODES_SETTING.getKey(), 2).put(dataOnlyNode()));
12058
assertThat(master1.admin().cluster().prepareState().setLocal(true).execute().actionGet()
12159
.getState().blocks().global(ClusterBlockLevel.METADATA_WRITE),
12260
hasItem(GatewayService.STATE_NOT_RECOVERED_BLOCK));
@@ -125,7 +63,7 @@ public void testRecoverAfterDataNodes() throws Exception {
12563
hasItem(GatewayService.STATE_NOT_RECOVERED_BLOCK));
12664

12765
logger.info("--> start master_node (2)");
128-
Client master2 = startNode(Settings.builder().put("gateway.recover_after_data_nodes", 2).put(masterOnlyNode()));
66+
Client master2 = startNode(Settings.builder().put(RECOVER_AFTER_DATA_NODES_SETTING.getKey(), 2).put(masterOnlyNode()));
12967
assertThat(master2.admin().cluster().prepareState().setLocal(true).execute().actionGet()
13068
.getState().blocks().global(ClusterBlockLevel.METADATA_WRITE),
13169
hasItem(GatewayService.STATE_NOT_RECOVERED_BLOCK));
@@ -137,7 +75,7 @@ public void testRecoverAfterDataNodes() throws Exception {
13775
hasItem(GatewayService.STATE_NOT_RECOVERED_BLOCK));
13876

13977
logger.info("--> start data_node (2)");
140-
Client data2 = startNode(Settings.builder().put("gateway.recover_after_data_nodes", 2).put(dataOnlyNode()));
78+
Client data2 = startNode(Settings.builder().put(RECOVER_AFTER_DATA_NODES_SETTING.getKey(), 2).put(dataOnlyNode()));
14179
assertThat(waitForNoBlocksOnNode(BLOCK_WAIT_TIMEOUT, master1).isEmpty(), equalTo(true));
14280
assertThat(waitForNoBlocksOnNode(BLOCK_WAIT_TIMEOUT, master2).isEmpty(), equalTo(true));
14381
assertThat(waitForNoBlocksOnNode(BLOCK_WAIT_TIMEOUT, data1).isEmpty(), equalTo(true));

server/src/internalClusterTest/java/org/elasticsearch/gateway/RecoveryFromGatewayIT.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
import static org.elasticsearch.cluster.metadata.IndexMetadata.SETTING_NUMBER_OF_REPLICAS;
6363
import static org.elasticsearch.cluster.metadata.IndexMetadata.SETTING_NUMBER_OF_SHARDS;
6464
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
65-
import static org.elasticsearch.gateway.GatewayService.RECOVER_AFTER_NODES_SETTING;
65+
import static org.elasticsearch.gateway.GatewayService.RECOVER_AFTER_DATA_NODES_SETTING;
6666
import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
6767
import static org.elasticsearch.index.query.QueryBuilders.termQuery;
6868
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
@@ -304,7 +304,7 @@ public void testTwoNodeFirstNodeCleared() throws Exception {
304304
@Override
305305
public Settings onNodeStopped(String nodeName) {
306306
return Settings.builder()
307-
.put(RECOVER_AFTER_NODES_SETTING.getKey(), 2)
307+
.put(RECOVER_AFTER_DATA_NODES_SETTING.getKey(), 2)
308308
.putList(INITIAL_MASTER_NODES_SETTING.getKey()) // disable bootstrapping
309309
.build();
310310
}
@@ -329,7 +329,7 @@ public boolean clearData(String nodeName) {
329329

330330
public void testLatestVersionLoaded() throws Exception {
331331
// clean two nodes
332-
List<String> nodes = internalCluster().startNodes(2, Settings.builder().put("gateway.recover_after_nodes", 2).build());
332+
List<String> nodes = internalCluster().startNodes(2, Settings.builder().put(RECOVER_AFTER_DATA_NODES_SETTING.getKey(), 2).build());
333333
Settings node1DataPathSettings = internalCluster().dataPathSettings(nodes.get(0));
334334
Settings node2DataPathSettings = internalCluster().dataPathSettings(nodes.get(1));
335335

@@ -386,8 +386,8 @@ public void testLatestVersionLoaded() throws Exception {
386386
logger.info("--> starting the two nodes back");
387387

388388
internalCluster().startNodes(
389-
Settings.builder().put(node1DataPathSettings).put("gateway.recover_after_nodes", 2).build(),
390-
Settings.builder().put(node2DataPathSettings).put("gateway.recover_after_nodes", 2).build());
389+
Settings.builder().put(node1DataPathSettings).put(RECOVER_AFTER_DATA_NODES_SETTING.getKey(), 2).build(),
390+
Settings.builder().put(node2DataPathSettings).put(RECOVER_AFTER_DATA_NODES_SETTING.getKey(), 2).build());
391391

392392
logger.info("--> running cluster_health (wait for the shards to startup)");
393393
ensureGreen();
@@ -542,7 +542,7 @@ public void testStartedShardFoundIfStateNotYetProcessed() throws Exception {
542542
@Override
543543
public Settings onNodeStopped(String nodeName) throws Exception {
544544
// make sure state is not recovered
545-
return Settings.builder().put(RECOVER_AFTER_NODES_SETTING.getKey(), 2).build();
545+
return Settings.builder().put(RECOVER_AFTER_DATA_NODES_SETTING.getKey(), 2).build();
546546
}
547547
});
548548

server/src/main/java/org/elasticsearch/common/settings/ClusterSettings.java

-4
Original file line numberDiff line numberDiff line change
@@ -229,11 +229,7 @@ public void apply(Settings value, Settings current, Settings previous) {
229229
DestructiveOperations.REQUIRES_NAME_SETTING,
230230
NoMasterBlockService.NO_MASTER_BLOCK_SETTING,
231231
GatewayService.EXPECTED_DATA_NODES_SETTING,
232-
GatewayService.EXPECTED_MASTER_NODES_SETTING,
233-
GatewayService.EXPECTED_NODES_SETTING,
234232
GatewayService.RECOVER_AFTER_DATA_NODES_SETTING,
235-
GatewayService.RECOVER_AFTER_MASTER_NODES_SETTING,
236-
GatewayService.RECOVER_AFTER_NODES_SETTING,
237233
GatewayService.RECOVER_AFTER_TIME_SETTING,
238234
PersistedClusterStateService.SLOW_WRITE_LOGGING_THRESHOLD,
239235
NetworkModule.HTTP_DEFAULT_TYPE_SETTING,

0 commit comments

Comments
 (0)