Pass in relevant disk usage map for early termination
This commit is contained in:
parent
f46e66e7d0
commit
7571276b84
|
@ -335,15 +335,16 @@ public class DiskThresholdDecider extends AllocationDecider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Decision canAllocate(ShardRouting shardRouting, RoutingNode node, RoutingAllocation allocation) {
|
public Decision canAllocate(ShardRouting shardRouting, RoutingNode node, RoutingAllocation allocation) {
|
||||||
final Decision decision = earlyTerminate(allocation);
|
ClusterInfo clusterInfo = allocation.clusterInfo();
|
||||||
|
Map<String, DiskUsage> usages = clusterInfo.getNodeMostAvailableDiskUsages();
|
||||||
|
final Decision decision = earlyTerminate(allocation, usages);
|
||||||
if (decision != null) {
|
if (decision != null) {
|
||||||
return decision;
|
return decision;
|
||||||
}
|
}
|
||||||
|
|
||||||
final double usedDiskThresholdLow = 100.0 - DiskThresholdDecider.this.freeDiskThresholdLow;
|
final double usedDiskThresholdLow = 100.0 - DiskThresholdDecider.this.freeDiskThresholdLow;
|
||||||
final double usedDiskThresholdHigh = 100.0 - DiskThresholdDecider.this.freeDiskThresholdHigh;
|
final double usedDiskThresholdHigh = 100.0 - DiskThresholdDecider.this.freeDiskThresholdHigh;
|
||||||
ClusterInfo clusterInfo = allocation.clusterInfo();
|
|
||||||
Map<String, DiskUsage> usages = clusterInfo.getNodeMostAvailableDiskUsages();
|
|
||||||
DiskUsage usage = getDiskUsage(node, allocation, usages);
|
DiskUsage usage = getDiskUsage(node, allocation, usages);
|
||||||
// First, check that the node currently over the low watermark
|
// First, check that the node currently over the low watermark
|
||||||
double freeDiskPercentage = usage.getFreeDiskAsPercentage();
|
double freeDiskPercentage = usage.getFreeDiskAsPercentage();
|
||||||
|
@ -449,12 +450,13 @@ public class DiskThresholdDecider extends AllocationDecider {
|
||||||
if (shardRouting.currentNodeId().equals(node.nodeId()) == false) {
|
if (shardRouting.currentNodeId().equals(node.nodeId()) == false) {
|
||||||
throw new IllegalArgumentException("Shard [" + shardRouting + "] is not allocated on node: [" + node.nodeId() + "]");
|
throw new IllegalArgumentException("Shard [" + shardRouting + "] is not allocated on node: [" + node.nodeId() + "]");
|
||||||
}
|
}
|
||||||
final Decision decision = earlyTerminate(allocation);
|
final ClusterInfo clusterInfo = allocation.clusterInfo();
|
||||||
|
final Map<String, DiskUsage> usages = clusterInfo.getNodeLeastAvailableDiskUsages();
|
||||||
|
final Decision decision = earlyTerminate(allocation, usages);
|
||||||
if (decision != null) {
|
if (decision != null) {
|
||||||
return decision;
|
return decision;
|
||||||
}
|
}
|
||||||
final ClusterInfo clusterInfo = allocation.clusterInfo();
|
|
||||||
final Map<String, DiskUsage> usages = clusterInfo.getNodeLeastAvailableDiskUsages();
|
|
||||||
final DiskUsage usage = getDiskUsage(node, allocation, usages);
|
final DiskUsage usage = getDiskUsage(node, allocation, usages);
|
||||||
final String dataPath = clusterInfo.getDataPath(shardRouting);
|
final String dataPath = clusterInfo.getDataPath(shardRouting);
|
||||||
// If this node is already above the high threshold, the shard cannot remain (get it off!)
|
// If this node is already above the high threshold, the shard cannot remain (get it off!)
|
||||||
|
@ -590,7 +592,7 @@ public class DiskThresholdDecider extends AllocationDecider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Decision earlyTerminate(RoutingAllocation allocation) {
|
private Decision earlyTerminate(RoutingAllocation allocation, final Map<String, DiskUsage> usages) {
|
||||||
// Always allow allocation if the decider is disabled
|
// Always allow allocation if the decider is disabled
|
||||||
if (!enabled) {
|
if (!enabled) {
|
||||||
return allocation.decision(Decision.YES, NAME, "disk threshold decider disabled");
|
return allocation.decision(Decision.YES, NAME, "disk threshold decider disabled");
|
||||||
|
@ -613,7 +615,6 @@ public class DiskThresholdDecider extends AllocationDecider {
|
||||||
return allocation.decision(Decision.YES, NAME, "cluster info unavailable");
|
return allocation.decision(Decision.YES, NAME, "cluster info unavailable");
|
||||||
}
|
}
|
||||||
|
|
||||||
final Map<String, DiskUsage> usages = clusterInfo.getNodeLeastAvailableDiskUsages();
|
|
||||||
// Fail open if there are no disk usages available
|
// Fail open if there are no disk usages available
|
||||||
if (usages.isEmpty()) {
|
if (usages.isEmpty()) {
|
||||||
if (logger.isTraceEnabled()) {
|
if (logger.isTraceEnabled()) {
|
||||||
|
|
Loading…
Reference in New Issue