Skip to content

Commit 92e7d7b

Browse files
committed
Tracking indicesToMarkIneligibleForAutoRelease instead of a Map and addressing other minor comments
1 parent c90c84f commit 92e7d7b

File tree

2 files changed

+17
-24
lines changed

2 files changed

+17
-24
lines changed

server/src/main/java/org/elasticsearch/cluster/routing/allocation/DiskThresholdMonitor.java

+16-23
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,8 @@
1919

2020
package org.elasticsearch.cluster.routing.allocation;
2121

22-
import java.util.HashMap;
22+
import java.util.Arrays;
2323
import java.util.HashSet;
24-
import java.util.Map;
2524
import java.util.Set;
2625
import java.util.function.Supplier;
2726
import java.util.stream.Collectors;
@@ -116,20 +115,18 @@ public void onNewInfo(ClusterInfo info) {
116115
ClusterState state = clusterStateSupplier.get();
117116
Set<String> indicesToMarkReadOnly = new HashSet<>();
118117
RoutingNodes routingNodes = state.getRoutingNodes();
119-
Map<String, Boolean> indexAutoReleaseEligibility = new HashMap<>();
120-
// Ensure we release indices on nodes that have a usage response from node stats
121-
markNodesMissingUsageIneligibleForRelease(routingNodes, usages, indexAutoReleaseEligibility);
118+
Set<String> indicesToMarkIneligibleForAutoRelease = new HashSet<>();
119+
//Ensure we release indices on nodes that have a usage response from node stats
120+
markNodesMissingUsageIneligibleForRelease(routingNodes, usages, indicesToMarkIneligibleForAutoRelease);
122121
for (ObjectObjectCursor<String, DiskUsage> entry : usages) {
123122
String node = entry.key;
124123
DiskUsage usage = entry.value;
125124
warnAboutDiskIfNeeded(usage);
126-
RoutingNode routingNode = state.getRoutingNodes().node(node);
125+
RoutingNode routingNode = routingNodes.node(node);
127126
// Only unblock index if all nodes that contain shards of it are below the high disk watermark
128127
if (usage.getFreeBytes() < diskThresholdSettings.getFreeBytesThresholdHigh().getBytes()
129128
|| usage.getFreeDiskAsPercentage() < diskThresholdSettings.getFreeDiskThresholdHigh()) {
130-
markEligiblityForAutoRelease(routingNode, indexAutoReleaseEligibility, false);
131-
} else {
132-
markEligiblityForAutoRelease(routingNode, indexAutoReleaseEligibility, true);
129+
markIneligiblityForAutoRelease(routingNode, indicesToMarkIneligibleForAutoRelease);
133130
}
134131
if (usage.getFreeBytes() < diskThresholdSettings.getFreeBytesThresholdFloodStage().getBytes() ||
135132
usage.getFreeDiskAsPercentage() < diskThresholdSettings.getFreeDiskThresholdFloodStage()) {
@@ -179,9 +176,9 @@ public void onNewInfo(ClusterInfo info) {
179176

180177
// Get set of indices that are eligible to be automatically unblocked
181178
// Only collect indices that are currently blocked
182-
Set<String> indicesToAutoRelease = indexAutoReleaseEligibility.entrySet().stream()
183-
.filter(Map.Entry::getValue)
184-
.map(Map.Entry::getKey)
179+
final String[] indices = state.routingTable().indicesRouting().keys().toArray(String.class);
180+
Set<String> indicesToAutoRelease = Arrays.stream(indices)
181+
.filter(index -> indicesToMarkIneligibleForAutoRelease.contains(index) == false)
185182
.filter(index -> state.getBlocks().hasIndexBlock(index, IndexMetaData.INDEX_READ_ONLY_ALLOW_DELETE_BLOCK))
186183
.collect(Collectors.toCollection(HashSet::new));
187184

@@ -190,7 +187,7 @@ public void onNewInfo(ClusterInfo info) {
190187
logger.info("Releasing read-only allow delete block on indices: [{}]", indicesToAutoRelease);
191188
updateIndicesReadOnly(indicesToAutoRelease, false);
192189
} else {
193-
deprecationLogger.deprecated("es.disk.auto_release_flood_stage_block will be removed in 8.0.0");
190+
deprecationLogger.deprecated("[{}] will be removed in 8.0.0", DiskThresholdSettings.AUTO_RELEASE_INDEX_ENABLED_KEY);
194191
}
195192
}
196193
indicesToMarkReadOnly.removeIf(index -> state.getBlocks().indexBlocked(ClusterBlockLevel.WRITE, index));
@@ -202,24 +199,20 @@ public void onNewInfo(ClusterInfo info) {
202199

203200

204201
private void markNodesMissingUsageIneligibleForRelease(RoutingNodes routingNodes, ImmutableOpenMap<String, DiskUsage> usages,
205-
Map<String, Boolean> indexAutoReleaseEligibility) {
206-
if (routingNodes.size() != usages.size()) {
207-
for (RoutingNode routingNode : routingNodes) {
208-
if (!usages.keys().contains(routingNode.nodeId())) {
209-
markEligiblityForAutoRelease(routingNode, indexAutoReleaseEligibility, false);
210-
}
202+
Set<String> indicesToMarkIneligibleForAutoRelease) {
203+
for (RoutingNode routingNode : routingNodes) {
204+
if (usages.containsKey(routingNode.nodeId()) == false) {
205+
markIneligiblityForAutoRelease(routingNode, indicesToMarkIneligibleForAutoRelease);
211206
}
212207
}
213208

214209
}
215210

216-
private void markEligiblityForAutoRelease(RoutingNode routingNode, Map<String, Boolean> indexAutoReleaseEligibility,
217-
boolean eligible) {
211+
private void markIneligiblityForAutoRelease(RoutingNode routingNode, Set<String> indicesToMarkIneligibleForAutoRelease) {
218212
if (routingNode != null) {
219213
for (ShardRouting routing : routingNode) {
220214
String indexName = routing.index().getName();
221-
boolean value = indexAutoReleaseEligibility.getOrDefault(indexName, true);
222-
indexAutoReleaseEligibility.put(indexName, value && eligible);
215+
indicesToMarkIneligibleForAutoRelease.add(indexName);
223216
}
224217
}
225218
}

server/src/main/java/org/elasticsearch/cluster/routing/allocation/DiskThresholdSettings.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@ public class DiskThresholdSettings {
7373
private volatile Double freeDiskThresholdFloodStage;
7474
private volatile ByteSizeValue freeBytesThresholdFloodStage;
7575
private static boolean autoReleaseIndexEnabled;
76+
public static final String AUTO_RELEASE_INDEX_ENABLED_KEY = "es.disk.auto_release_flood_stage_block";
7677

7778
static {
78-
final String AUTO_RELEASE_INDEX_ENABLED_KEY = "es.disk.auto_release_flood_stage_block";
7979
final String property = System.getProperty(AUTO_RELEASE_INDEX_ENABLED_KEY);
8080
if (property == null) {
8181
autoReleaseIndexEnabled = true;

0 commit comments

Comments
 (0)