10
10
11
11
import org .elasticsearch .action .admin .cluster .settings .ClusterUpdateSettingsRequest ;
12
12
import org .elasticsearch .cluster .node .DiscoveryNodeRole ;
13
- import org .elasticsearch .cluster .routing .allocation .DiskThresholdSettings ;
14
13
import org .elasticsearch .common .settings .Settings ;
15
14
import org .elasticsearch .common .unit .ByteSizeValue ;
16
15
import org .elasticsearch .health .metadata .HealthMetadata ;
22
21
import java .util .Map ;
23
22
import java .util .Set ;
24
23
24
+ import static org .elasticsearch .cluster .routing .allocation .DiskThresholdSettings .CLUSTER_ROUTING_ALLOCATION_DISK_FLOOD_STAGE_FROZEN_MAX_HEADROOM_SETTING ;
25
+ import static org .elasticsearch .cluster .routing .allocation .DiskThresholdSettings .CLUSTER_ROUTING_ALLOCATION_DISK_FLOOD_STAGE_FROZEN_WATERMARK_SETTING ;
25
26
import static org .elasticsearch .cluster .routing .allocation .DiskThresholdSettings .CLUSTER_ROUTING_ALLOCATION_DISK_FLOOD_STAGE_MAX_HEADROOM_SETTING ;
26
27
import static org .elasticsearch .cluster .routing .allocation .DiskThresholdSettings .CLUSTER_ROUTING_ALLOCATION_DISK_FLOOD_STAGE_WATERMARK_SETTING ;
27
28
import static org .elasticsearch .cluster .routing .allocation .DiskThresholdSettings .CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_MAX_HEADROOM_SETTING ;
28
29
import static org .elasticsearch .cluster .routing .allocation .DiskThresholdSettings .CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_WATERMARK_SETTING ;
29
30
import static org .elasticsearch .cluster .routing .allocation .DiskThresholdSettings .CLUSTER_ROUTING_ALLOCATION_LOW_DISK_MAX_HEADROOM_SETTING ;
30
31
import static org .elasticsearch .cluster .routing .allocation .DiskThresholdSettings .CLUSTER_ROUTING_ALLOCATION_LOW_DISK_WATERMARK_SETTING ;
32
+ import static org .elasticsearch .common .settings .Settings .EMPTY ;
31
33
import static org .elasticsearch .indices .ShardLimitValidator .SETTING_CLUSTER_MAX_SHARDS_PER_NODE ;
32
34
import static org .elasticsearch .indices .ShardLimitValidator .SETTING_CLUSTER_MAX_SHARDS_PER_NODE_FROZEN ;
33
35
import static org .elasticsearch .test .NodeRoles .onlyRoles ;
@@ -52,11 +54,10 @@ public void testEachMasterPublishesTheirThresholds() throws Exception {
52
54
for (int i = 0 ; i < numberOfNodes ; i ++) {
53
55
ByteSizeValue randomBytes = ByteSizeValue .ofBytes (randomLongBetween (6 , 19 ));
54
56
String customWatermark = percentageMode ? randomIntBetween (86 , 94 ) + "%" : randomBytes .toString ();
55
- ByteSizeValue customMaxHeadroom = percentageMode ? randomBytes : ByteSizeValue .MINUS_ONE ;
56
57
var customShardLimits = new HealthMetadata .ShardLimits (randomIntBetween (1 , 1000 ), randomIntBetween (1001 , 2000 ));
57
- String nodeName = startNode (internalCluster , customWatermark , customMaxHeadroom .toString (), customShardLimits );
58
+ String nodeName = startNode (internalCluster , customWatermark , randomBytes .toString (), customShardLimits );
58
59
watermarkByNode .put (nodeName , customWatermark );
59
- maxHeadroomByNode .put (nodeName , customMaxHeadroom );
60
+ maxHeadroomByNode .put (nodeName , randomBytes );
60
61
shardLimitsPerNode .put (nodeName , customShardLimits );
61
62
}
62
63
ensureStableCluster (numberOfNodes );
@@ -66,7 +67,16 @@ public void testEachMasterPublishesTheirThresholds() throws Exception {
66
67
var healthMetadata = HealthMetadata .getFromClusterState (internalCluster .clusterService ().state ());
67
68
var diskMetadata = healthMetadata .getDiskMetadata ();
68
69
assertThat (diskMetadata .describeHighWatermark (), equalTo (watermarkByNode .get (electedMaster )));
69
- assertThat (diskMetadata .highMaxHeadroom (), equalTo (maxHeadroomByNode .get (electedMaster )));
70
+ // The value of the setting `cluster.routing.allocation.disk.watermark.high.max_headroom` depends upon the existence of
71
+ // `cluster.routing.allocation.disk.watermark.high`. Check {@link CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_MAX_HEADROOM_SETTING}
72
+ assertThat (
73
+ diskMetadata .highMaxHeadroom (),
74
+ equalTo (
75
+ percentageMode
76
+ ? maxHeadroomByNode .get (electedMaster )
77
+ : CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_MAX_HEADROOM_SETTING .getDefault (EMPTY )
78
+ )
79
+ );
70
80
71
81
var shardLimitsMetadata = healthMetadata .getShardLimitsMetadata ();
72
82
assertEquals (shardLimitsMetadata , shardLimitsPerNode .get (electedMaster ));
@@ -80,7 +90,18 @@ public void testEachMasterPublishesTheirThresholds() throws Exception {
80
90
var healthMetadata = HealthMetadata .getFromClusterState (internalCluster .clusterService ().state ());
81
91
var diskMetadata = healthMetadata .getDiskMetadata ();
82
92
assertThat (diskMetadata .describeHighWatermark (), equalTo (watermarkByNode .get (electedMaster )));
83
- assertThat (diskMetadata .highMaxHeadroom (), equalTo (maxHeadroomByNode .get (electedMaster )));
93
+
94
+ // The value of the setting `cluster.routing.allocation.disk.watermark.high.max_headroom` depends upon the existence of
95
+ // `cluster.routing.allocation.disk.watermark.high`.
96
+ // Check {@link DiskThresholdSettings.CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_MAX_HEADROOM_SETTING}
97
+ assertThat (
98
+ diskMetadata .highMaxHeadroom (),
99
+ equalTo (
100
+ percentageMode
101
+ ? maxHeadroomByNode .get (electedMaster )
102
+ : CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_MAX_HEADROOM_SETTING .getDefault (EMPTY )
103
+ )
104
+ );
84
105
85
106
var shardLimitsMetadata = healthMetadata .getShardLimitsMetadata ();
86
107
assertEquals (shardLimitsMetadata , shardLimitsPerNode .get (electedMaster ));
@@ -93,7 +114,7 @@ public void testWatermarkSettingUpdate() throws Exception {
93
114
int numberOfNodes = 3 ;
94
115
ByteSizeValue randomBytes = ByteSizeValue .ofBytes (randomLongBetween (6 , 19 ));
95
116
String initialWatermark = percentageMode ? randomIntBetween (86 , 94 ) + "%" : randomBytes .toString ();
96
- ByteSizeValue initialMaxHeadroom = percentageMode ? randomBytes : ByteSizeValue . MINUS_ONE ;
117
+ ByteSizeValue initialMaxHeadroom = randomBytes ;
97
118
HealthMetadata .ShardLimits initialShardLimits = new HealthMetadata .ShardLimits (
98
119
randomIntBetween (1 , 1000 ),
99
120
randomIntBetween (1001 , 2000 )
@@ -107,7 +128,7 @@ public void testWatermarkSettingUpdate() throws Exception {
107
128
ByteSizeValue updatedLowMaxHeadroom = percentageMode ? randomBytes : ByteSizeValue .MINUS_ONE ;
108
129
randomBytes = ByteSizeValue .ofBytes (randomLongBetween (50 , 100 ));
109
130
String updatedHighWatermark = percentageMode ? randomIntBetween (60 , 90 ) + "%" : randomBytes .toString ();
110
- ByteSizeValue updatedHighMaxHeadroom = percentageMode ? randomBytes : ByteSizeValue . MINUS_ONE ;
131
+ ByteSizeValue updatedHighMaxHeadroom = randomBytes ;
111
132
randomBytes = ByteSizeValue .ofBytes (randomLongBetween (5 , 10 ));
112
133
String updatedFloodStageWatermark = percentageMode ? randomIntBetween (91 , 95 ) + "%" : randomBytes .toString ();
113
134
ByteSizeValue updatedFloodStageMaxHeadroom = percentageMode ? randomBytes : ByteSizeValue .MINUS_ONE ;
@@ -121,7 +142,16 @@ public void testWatermarkSettingUpdate() throws Exception {
121
142
var healthMetadata = HealthMetadata .getFromClusterState (internalCluster .clusterService ().state ());
122
143
var diskMetadata = healthMetadata .getDiskMetadata ();
123
144
assertThat (diskMetadata .describeHighWatermark (), equalTo (initialWatermark ));
124
- assertThat (diskMetadata .highMaxHeadroom (), equalTo (initialMaxHeadroom ));
145
+
146
+ // The value of the setting `cluster.routing.allocation.disk.watermark.high.max_headroom` depends upon the existence of
147
+ // `cluster.routing.allocation.disk.watermark.high`.
148
+ // Check {@link DiskThresholdSettings.CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_MAX_HEADROOM_SETTING}
149
+ assertThat (
150
+ diskMetadata .highMaxHeadroom (),
151
+ equalTo (
152
+ percentageMode ? initialMaxHeadroom : CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_MAX_HEADROOM_SETTING .getDefault (EMPTY )
153
+ )
154
+ );
125
155
126
156
var shardLimitsMetadata = healthMetadata .getShardLimitsMetadata ();
127
157
assertEquals (shardLimitsMetadata , initialShardLimits );
@@ -147,9 +177,31 @@ public void testWatermarkSettingUpdate() throws Exception {
147
177
var healthMetadata = HealthMetadata .getFromClusterState (internalCluster .clusterService ().state ());
148
178
var diskMetadata = healthMetadata .getDiskMetadata ();
149
179
assertThat (diskMetadata .describeHighWatermark (), equalTo (updatedHighWatermark ));
150
- assertThat (diskMetadata .highMaxHeadroom (), equalTo (updatedHighMaxHeadroom ));
180
+
181
+ // The value of the setting `cluster.routing.allocation.disk.watermark.high.max_headroom` depends upon the existence of
182
+ // `cluster.routing.allocation.disk.watermark.high`.
183
+ // Check {@link DiskThresholdSettings.CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_MAX_HEADROOM_SETTING}
184
+ assertThat (
185
+ diskMetadata .highMaxHeadroom (),
186
+ equalTo (
187
+ percentageMode
188
+ ? updatedHighMaxHeadroom
189
+ : CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_MAX_HEADROOM_SETTING .getDefault (EMPTY )
190
+ )
191
+ );
151
192
assertThat (diskMetadata .describeFloodStageWatermark (), equalTo (updatedFloodStageWatermark ));
152
- assertThat (diskMetadata .floodStageMaxHeadroom (), equalTo (updatedFloodStageMaxHeadroom ));
193
+
194
+ // The value of the setting `cluster.routing.allocation.disk.watermark.flood_stage.max_headroom` depends upon the existence
195
+ // of `cluster.routing.allocation.disk.watermark.flood_stage`.
196
+ // Check{@link DiskThresholdSettings.CLUSTER_ROUTING_ALLOCATION_DISK_FLOOD_STAGE_MAX_HEADROOM_SETTING}
197
+ assertThat (
198
+ diskMetadata .floodStageMaxHeadroom (),
199
+ equalTo (
200
+ percentageMode
201
+ ? updatedFloodStageMaxHeadroom
202
+ : CLUSTER_ROUTING_ALLOCATION_DISK_FLOOD_STAGE_MAX_HEADROOM_SETTING .getDefault (EMPTY )
203
+ )
204
+ );
153
205
154
206
var shardLimitsMetadata = healthMetadata .getShardLimitsMetadata ();
155
207
assertEquals (shardLimitsMetadata , updatedShardLimits );
@@ -175,21 +227,17 @@ private String startNode(
175
227
176
228
private Settings createWatermarkSettings (String highWatermark , String highMaxHeadroom ) {
177
229
// We define both thresholds to avoid inconsistencies over the type of the thresholds
178
- Settings . Builder settings = Settings .builder ()
230
+ var settings = Settings .builder ()
179
231
.put (CLUSTER_ROUTING_ALLOCATION_LOW_DISK_WATERMARK_SETTING .getKey (), percentageMode ? "85%" : "20b" )
180
232
.put (CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_WATERMARK_SETTING .getKey (), highWatermark )
181
233
.put (CLUSTER_ROUTING_ALLOCATION_DISK_FLOOD_STAGE_WATERMARK_SETTING .getKey (), percentageMode ? "95%" : "1b" )
182
- .put (
183
- DiskThresholdSettings .CLUSTER_ROUTING_ALLOCATION_DISK_FLOOD_STAGE_FROZEN_WATERMARK_SETTING .getKey (),
184
- percentageMode ? "95%" : "5b"
185
- );
234
+ .put (CLUSTER_ROUTING_ALLOCATION_DISK_FLOOD_STAGE_FROZEN_WATERMARK_SETTING .getKey (), percentageMode ? "95%" : "5b" );
235
+
186
236
if (percentageMode ) {
187
- settings = settings .put (CLUSTER_ROUTING_ALLOCATION_LOW_DISK_MAX_HEADROOM_SETTING .getKey (), "20b" )
237
+ settings .put (CLUSTER_ROUTING_ALLOCATION_LOW_DISK_MAX_HEADROOM_SETTING .getKey (), "20b" )
188
238
.put (CLUSTER_ROUTING_ALLOCATION_DISK_FLOOD_STAGE_MAX_HEADROOM_SETTING .getKey (), "1b" )
189
- .put (DiskThresholdSettings .CLUSTER_ROUTING_ALLOCATION_DISK_FLOOD_STAGE_FROZEN_MAX_HEADROOM_SETTING .getKey (), "5b" );
190
- if (highMaxHeadroom .equals ("-1" ) == false ) {
191
- settings = settings .put (CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_MAX_HEADROOM_SETTING .getKey (), highMaxHeadroom );
192
- }
239
+ .put (CLUSTER_ROUTING_ALLOCATION_DISK_FLOOD_STAGE_FROZEN_MAX_HEADROOM_SETTING .getKey (), "5b" )
240
+ .put (CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_MAX_HEADROOM_SETTING .getKey (), highMaxHeadroom );
193
241
}
194
242
return settings .build ();
195
243
}
0 commit comments