_reroute's retry_failed flag should reset failure counter (#25888)
To protect against poisonous situations, ES will only try to allocate a shard 5 times (by default). After 5 consecutive failures, ES will stop assigning the shard and wait for an operator to fix the problem. Once the problem is fixed, the operator is expected to call `_reroute` with a `retry_failed` flag to force retrying of those shards. Currently that retry flag is only used for a single allocation run. However, if not all shards can be allocated at once (due to throttling) the operator has to keep on calling the API until all shards are assigned which is cumbersome. This PR changes the behavior of the flag to reset the failed allocations counter and this allowing shards to be assigned again.
This commit is contained in:
parent
3435c9f4e2
commit
155db7326a
|
@ -94,7 +94,7 @@ public class TransportClusterAllocationExplainAction
|
|||
final RoutingNodes routingNodes = state.getRoutingNodes();
|
||||
final ClusterInfo clusterInfo = clusterInfoService.getClusterInfo();
|
||||
final RoutingAllocation allocation = new RoutingAllocation(allocationDeciders, routingNodes, state,
|
||||
clusterInfo, System.nanoTime(), false);
|
||||
clusterInfo, System.nanoTime());
|
||||
|
||||
ShardRouting shardRouting = findShardToExplain(request, allocation);
|
||||
logger.debug("explaining the allocation for [{}], found shard [{}]", request, shardRouting);
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
package org.elasticsearch.cluster.routing;
|
||||
|
||||
import org.elasticsearch.ExceptionsHelper;
|
||||
import org.elasticsearch.Version;
|
||||
import org.elasticsearch.cluster.ClusterState;
|
||||
import org.elasticsearch.cluster.metadata.MetaData;
|
||||
import org.elasticsearch.cluster.routing.allocation.decider.Decision;
|
||||
|
@ -113,7 +114,11 @@ public final class UnassignedInfo implements ToXContentFragment, Writeable {
|
|||
/**
|
||||
* Unassigned after forcing an empty primary
|
||||
*/
|
||||
FORCED_EMPTY_PRIMARY
|
||||
FORCED_EMPTY_PRIMARY,
|
||||
/**
|
||||
* Forced manually to allocate
|
||||
*/
|
||||
MANUAL_ALLOCATION
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -262,7 +267,11 @@ public final class UnassignedInfo implements ToXContentFragment, Writeable {
|
|||
}
|
||||
|
||||
public void writeTo(StreamOutput out) throws IOException {
|
||||
out.writeByte((byte) reason.ordinal());
|
||||
if (out.getVersion().before(Version.V_6_0_0_beta2) && reason == Reason.MANUAL_ALLOCATION) {
|
||||
out.writeByte((byte) Reason.ALLOCATION_FAILED.ordinal());
|
||||
} else {
|
||||
out.writeByte((byte) reason.ordinal());
|
||||
}
|
||||
out.writeLong(unassignedTimeMillis);
|
||||
// Do not serialize unassignedTimeNanos as System.nanoTime() cannot be compared across different JVMs
|
||||
out.writeBoolean(delayed);
|
||||
|
|
|
@ -97,7 +97,7 @@ public class AllocationService extends AbstractComponent {
|
|||
// shuffle the unassigned nodes, just so we won't have things like poison failed shards
|
||||
routingNodes.unassigned().shuffle();
|
||||
RoutingAllocation allocation = new RoutingAllocation(allocationDeciders, routingNodes, clusterState,
|
||||
clusterInfoService.getClusterInfo(), currentNanoTime(), false);
|
||||
clusterInfoService.getClusterInfo(), currentNanoTime());
|
||||
// as starting a primary relocation target can reinitialize replica shards, start replicas first
|
||||
startedShards = new ArrayList<>(startedShards);
|
||||
Collections.sort(startedShards, Comparator.comparing(ShardRouting::primary));
|
||||
|
@ -164,7 +164,7 @@ public class AllocationService extends AbstractComponent {
|
|||
routingNodes.unassigned().shuffle();
|
||||
long currentNanoTime = currentNanoTime();
|
||||
RoutingAllocation allocation = new RoutingAllocation(allocationDeciders, routingNodes, tmpState,
|
||||
clusterInfoService.getClusterInfo(), currentNanoTime, false);
|
||||
clusterInfoService.getClusterInfo(), currentNanoTime);
|
||||
|
||||
for (FailedShard failedShardEntry : failedShards) {
|
||||
ShardRouting shardToFail = failedShardEntry.getRoutingEntry();
|
||||
|
@ -202,7 +202,7 @@ public class AllocationService extends AbstractComponent {
|
|||
// shuffle the unassigned nodes, just so we won't have things like poison failed shards
|
||||
routingNodes.unassigned().shuffle();
|
||||
RoutingAllocation allocation = new RoutingAllocation(allocationDeciders, routingNodes, clusterState,
|
||||
clusterInfoService.getClusterInfo(), currentNanoTime(), false);
|
||||
clusterInfoService.getClusterInfo(), currentNanoTime());
|
||||
|
||||
// first, clear from the shards any node id they used to belong to that is now dead
|
||||
deassociateDeadNodes(allocation);
|
||||
|
@ -239,6 +239,22 @@ public class AllocationService extends AbstractComponent {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset failed allocation counter for unassigned shards
|
||||
*/
|
||||
private void resetFailedAllocationCounter(RoutingAllocation allocation) {
|
||||
final RoutingNodes.UnassignedShards.UnassignedIterator unassignedIterator = allocation.routingNodes().unassigned().iterator();
|
||||
while (unassignedIterator.hasNext()) {
|
||||
ShardRouting shardRouting = unassignedIterator.next();
|
||||
UnassignedInfo unassignedInfo = shardRouting.unassignedInfo();
|
||||
unassignedIterator.updateUnassigned(new UnassignedInfo(unassignedInfo.getNumFailedAllocations() > 0 ?
|
||||
UnassignedInfo.Reason.MANUAL_ALLOCATION : unassignedInfo.getReason(), unassignedInfo.getMessage(),
|
||||
unassignedInfo.getFailure(), 0, unassignedInfo.getUnassignedTimeInNanos(),
|
||||
unassignedInfo.getUnassignedTimeInMillis(), unassignedInfo.isDelayed(),
|
||||
unassignedInfo.getLastAllocationStatus()), shardRouting.recoverySource(), allocation.changes());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal helper to cap the number of elements in a potentially long list for logging.
|
||||
*
|
||||
|
@ -262,7 +278,7 @@ public class AllocationService extends AbstractComponent {
|
|||
// a consistent result of the effect the commands have on the routing
|
||||
// this allows systems to dry run the commands, see the resulting cluster state, and act on it
|
||||
RoutingAllocation allocation = new RoutingAllocation(allocationDeciders, routingNodes, clusterState,
|
||||
clusterInfoService.getClusterInfo(), currentNanoTime(), retryFailed);
|
||||
clusterInfoService.getClusterInfo(), currentNanoTime());
|
||||
// don't short circuit deciders, we want a full explanation
|
||||
allocation.debugDecision(true);
|
||||
// we ignore disable allocation, because commands are explicit
|
||||
|
@ -272,6 +288,10 @@ public class AllocationService extends AbstractComponent {
|
|||
allocation.ignoreDisable(false);
|
||||
// the assumption is that commands will move / act on shards (or fail through exceptions)
|
||||
// so, there will always be shard "movements", so no need to check on reroute
|
||||
|
||||
if (retryFailed) {
|
||||
resetFailedAllocationCounter(allocation);
|
||||
}
|
||||
reroute(allocation);
|
||||
return new CommandsResult(explanations, buildResultAndLogHealthChange(clusterState, allocation, "reroute commands"));
|
||||
}
|
||||
|
@ -296,7 +316,7 @@ public class AllocationService extends AbstractComponent {
|
|||
// shuffle the unassigned nodes, just so we won't have things like poison failed shards
|
||||
routingNodes.unassigned().shuffle();
|
||||
RoutingAllocation allocation = new RoutingAllocation(allocationDeciders, routingNodes, clusterState,
|
||||
clusterInfoService.getClusterInfo(), currentNanoTime(), false);
|
||||
clusterInfoService.getClusterInfo(), currentNanoTime());
|
||||
allocation.debugDecision(debug);
|
||||
reroute(allocation);
|
||||
if (allocation.routingNodesChanged() == false) {
|
||||
|
|
|
@ -66,8 +66,6 @@ public class RoutingAllocation {
|
|||
|
||||
private boolean ignoreDisable = false;
|
||||
|
||||
private final boolean retryFailed;
|
||||
|
||||
private DebugMode debugDecision = DebugMode.OFF;
|
||||
|
||||
private boolean hasPendingAsyncFetch = false;
|
||||
|
@ -90,7 +88,7 @@ public class RoutingAllocation {
|
|||
* @param currentNanoTime the nano time to use for all delay allocation calculation (typically {@link System#nanoTime()})
|
||||
*/
|
||||
public RoutingAllocation(AllocationDeciders deciders, RoutingNodes routingNodes, ClusterState clusterState, ClusterInfo clusterInfo,
|
||||
long currentNanoTime, boolean retryFailed) {
|
||||
long currentNanoTime) {
|
||||
this.deciders = deciders;
|
||||
this.routingNodes = routingNodes;
|
||||
this.metaData = clusterState.metaData();
|
||||
|
@ -99,7 +97,6 @@ public class RoutingAllocation {
|
|||
this.customs = clusterState.customs();
|
||||
this.clusterInfo = clusterInfo;
|
||||
this.currentNanoTime = currentNanoTime;
|
||||
this.retryFailed = retryFailed;
|
||||
}
|
||||
|
||||
/** returns the nano time captured at the beginning of the allocation. used to make sure all time based decisions are aligned */
|
||||
|
@ -285,10 +282,6 @@ public class RoutingAllocation {
|
|||
this.hasPendingAsyncFetch = true;
|
||||
}
|
||||
|
||||
public boolean isRetryFailed() {
|
||||
return retryFailed;
|
||||
}
|
||||
|
||||
public enum DebugMode {
|
||||
/**
|
||||
* debug mode is off
|
||||
|
|
|
@ -34,7 +34,6 @@ import org.elasticsearch.common.settings.Settings;
|
|||
* Note: This allocation decider also allows allocation of repeatedly failing shards when the <tt>/_cluster/reroute?retry_failed=true</tt>
|
||||
* API is manually invoked. This allows single retries without raising the limits.
|
||||
*
|
||||
* @see RoutingAllocation#isRetryFailed()
|
||||
*/
|
||||
public class MaxRetryAllocationDecider extends AllocationDecider {
|
||||
|
||||
|
@ -59,14 +58,7 @@ public class MaxRetryAllocationDecider extends AllocationDecider {
|
|||
if (unassignedInfo != null && unassignedInfo.getNumFailedAllocations() > 0) {
|
||||
final IndexMetaData indexMetaData = allocation.metaData().getIndexSafe(shardRouting.index());
|
||||
final int maxRetry = SETTING_ALLOCATION_MAX_RETRY.get(indexMetaData.getSettings());
|
||||
if (allocation.isRetryFailed()) { // manual allocation - retry
|
||||
// if we are called via the _reroute API we ignore the failure counter and try to allocate
|
||||
// this improves the usability since people don't need to raise the limits to issue retries since a simple _reroute call is
|
||||
// enough to manually retry.
|
||||
decision = allocation.decision(Decision.YES, NAME, "shard has exceeded the maximum number of retries [%d] on " +
|
||||
"failed allocation attempts - retrying once due to a manual reroute command, [%s]",
|
||||
maxRetry, unassignedInfo.toString());
|
||||
} else if (unassignedInfo.getNumFailedAllocations() >= maxRetry) {
|
||||
if (unassignedInfo.getNumFailedAllocations() >= maxRetry) {
|
||||
decision = allocation.decision(Decision.NO, NAME, "shard has exceeded the maximum number of retries [%d] on " +
|
||||
"failed allocation attempts - manually call [/_cluster/reroute?retry_failed=true] to retry, [%s]",
|
||||
maxRetry, unassignedInfo.toString());
|
||||
|
|
|
@ -52,7 +52,7 @@ public class ClusterAllocationExplainActionTests extends ESTestCase {
|
|||
ClusterState clusterState = ClusterStateCreationUtils.state("idx", randomBoolean(), shardRoutingState);
|
||||
ShardRouting shard = clusterState.getRoutingTable().index("idx").shard(0).primaryShard();
|
||||
RoutingAllocation allocation = new RoutingAllocation(new AllocationDeciders(Settings.EMPTY, Collections.emptyList()),
|
||||
clusterState.getRoutingNodes(), clusterState, null, System.nanoTime(), randomBoolean());
|
||||
clusterState.getRoutingNodes(), clusterState, null, System.nanoTime());
|
||||
ClusterAllocationExplanation cae = TransportClusterAllocationExplainAction.explainShard(shard, allocation, null, randomBoolean(),
|
||||
new TestGatewayAllocator(), new ShardsAllocator() {
|
||||
@Override
|
||||
|
@ -165,6 +165,6 @@ public class ClusterAllocationExplainActionTests extends ESTestCase {
|
|||
}
|
||||
|
||||
private static RoutingAllocation routingAllocation(ClusterState clusterState) {
|
||||
return new RoutingAllocation(NOOP_DECIDERS, clusterState.getRoutingNodes(), clusterState, null, System.nanoTime(), randomBoolean());
|
||||
return new RoutingAllocation(NOOP_DECIDERS, clusterState.getRoutingNodes(), clusterState, null, System.nanoTime());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -150,9 +150,9 @@ public class ClusterRerouteTests extends ESAllocationTestCase {
|
|||
assertNotSame(newState, clusterState); // dry-run=false
|
||||
clusterState = newState;
|
||||
routingTable = clusterState.routingTable();
|
||||
assertEquals(routingTable.index("idx").shards().size(), 1);
|
||||
assertEquals(routingTable.index("idx").shard(0).shards().get(0).state(), INITIALIZING);
|
||||
assertEquals(routingTable.index("idx").shard(0).shards().get(0).unassignedInfo().getNumFailedAllocations(), retries);
|
||||
assertEquals(1, routingTable.index("idx").shards().size());
|
||||
assertEquals(INITIALIZING, routingTable.index("idx").shard(0).shards().get(0).state());
|
||||
assertEquals(0, routingTable.index("idx").shard(0).shards().get(0).unassignedInfo().getNumFailedAllocations());
|
||||
}
|
||||
|
||||
private ClusterState createInitialClusterState(AllocationService service) {
|
||||
|
|
|
@ -69,7 +69,8 @@ public class UnassignedInfoTests extends ESAllocationTestCase {
|
|||
UnassignedInfo.Reason.REINITIALIZED,
|
||||
UnassignedInfo.Reason.REALLOCATED_REPLICA,
|
||||
UnassignedInfo.Reason.PRIMARY_FAILED,
|
||||
UnassignedInfo.Reason.FORCED_EMPTY_PRIMARY};
|
||||
UnassignedInfo.Reason.FORCED_EMPTY_PRIMARY,
|
||||
UnassignedInfo.Reason.MANUAL_ALLOCATION,};
|
||||
for (int i = 0; i < order.length; i++) {
|
||||
assertThat(order[i].ordinal(), equalTo(i));
|
||||
}
|
||||
|
|
|
@ -368,8 +368,7 @@ public class BalancedSingleShardTests extends ESAllocationTestCase {
|
|||
|
||||
private RoutingAllocation newRoutingAllocation(AllocationDeciders deciders, ClusterState state) {
|
||||
RoutingAllocation allocation = new RoutingAllocation(
|
||||
deciders, new RoutingNodes(state, false), state, ClusterInfo.EMPTY, System.nanoTime(), false
|
||||
);
|
||||
deciders, new RoutingNodes(state, false), state, ClusterInfo.EMPTY, System.nanoTime());
|
||||
allocation.debugDecision(true);
|
||||
return allocation;
|
||||
}
|
||||
|
|
|
@ -113,7 +113,7 @@ public class MaxRetryAllocationDeciderTests extends ESAllocationTestCase {
|
|||
assertEquals(routingTable.index("idx").shard(0).shards().get(0).state(), UNASSIGNED);
|
||||
assertEquals(routingTable.index("idx").shard(0).shards().get(0).unassignedInfo().getMessage(), "boom");
|
||||
|
||||
// manual reroute should retry once
|
||||
// manual resetting of retry count
|
||||
newState = strategy.reroute(clusterState, new AllocationCommands(), false, true).getClusterState();
|
||||
assertThat(newState, not(equalTo(clusterState)));
|
||||
clusterState = newState;
|
||||
|
@ -121,11 +121,12 @@ public class MaxRetryAllocationDeciderTests extends ESAllocationTestCase {
|
|||
|
||||
clusterState = ClusterState.builder(clusterState).routingTable(routingTable).build();
|
||||
assertEquals(routingTable.index("idx").shards().size(), 1);
|
||||
assertEquals(routingTable.index("idx").shard(0).shards().get(0).unassignedInfo().getNumFailedAllocations(), retries);
|
||||
assertEquals(routingTable.index("idx").shard(0).shards().get(0).state(), INITIALIZING);
|
||||
assertEquals(0, routingTable.index("idx").shard(0).shards().get(0).unassignedInfo().getNumFailedAllocations());
|
||||
assertEquals(INITIALIZING, routingTable.index("idx").shard(0).shards().get(0).state());
|
||||
assertEquals(routingTable.index("idx").shard(0).shards().get(0).unassignedInfo().getMessage(), "boom");
|
||||
|
||||
// now we go and check that we are actually stick to unassigned on the next failure ie. no retry
|
||||
// again fail it N-1 times
|
||||
for (int i = 0; i < retries-1; i++) {
|
||||
failedShards = Collections.singletonList(
|
||||
new FailedShard(routingTable.index("idx").shard(0).shards().get(0), "boom",
|
||||
new UnsupportedOperationException()));
|
||||
|
@ -135,10 +136,23 @@ public class MaxRetryAllocationDeciderTests extends ESAllocationTestCase {
|
|||
clusterState = newState;
|
||||
routingTable = newState.routingTable();
|
||||
assertEquals(routingTable.index("idx").shards().size(), 1);
|
||||
assertEquals(routingTable.index("idx").shard(0).shards().get(0).unassignedInfo().getNumFailedAllocations(), retries+1);
|
||||
assertEquals(routingTable.index("idx").shard(0).shards().get(0).state(), UNASSIGNED);
|
||||
assertEquals(i + 1, routingTable.index("idx").shard(0).shards().get(0).unassignedInfo().getNumFailedAllocations());
|
||||
assertEquals(INITIALIZING, routingTable.index("idx").shard(0).shards().get(0).state());
|
||||
assertEquals(routingTable.index("idx").shard(0).shards().get(0).unassignedInfo().getMessage(), "boom");
|
||||
}
|
||||
|
||||
// now we go and check that we are actually stick to unassigned on the next failure
|
||||
failedShards = Collections.singletonList(
|
||||
new FailedShard(routingTable.index("idx").shard(0).shards().get(0), "boom",
|
||||
new UnsupportedOperationException()));
|
||||
newState = strategy.applyFailedShards(clusterState, failedShards);
|
||||
assertThat(newState, not(equalTo(clusterState)));
|
||||
clusterState = newState;
|
||||
routingTable = newState.routingTable();
|
||||
assertEquals(routingTable.index("idx").shards().size(), 1);
|
||||
assertEquals(retries, routingTable.index("idx").shard(0).shards().get(0).unassignedInfo().getNumFailedAllocations());
|
||||
assertEquals(UNASSIGNED, routingTable.index("idx").shard(0).shards().get(0).state());
|
||||
assertEquals("boom", routingTable.index("idx").shard(0).shards().get(0).unassignedInfo().getMessage());
|
||||
}
|
||||
|
||||
public void testFailedAllocation() {
|
||||
|
@ -161,7 +175,7 @@ public class MaxRetryAllocationDeciderTests extends ESAllocationTestCase {
|
|||
assertEquals(unassignedPrimary.unassignedInfo().getMessage(), "boom" + i);
|
||||
// MaxRetryAllocationDecider#canForceAllocatePrimary should return YES decisions because canAllocate returns YES here
|
||||
assertEquals(Decision.YES, new MaxRetryAllocationDecider(Settings.EMPTY).canForceAllocatePrimary(
|
||||
unassignedPrimary, null, new RoutingAllocation(null, null, clusterState, null, 0, false)));
|
||||
unassignedPrimary, null, new RoutingAllocation(null, null, clusterState, null, 0)));
|
||||
}
|
||||
// now we go and check that we are actually stick to unassigned on the next failure
|
||||
{
|
||||
|
@ -179,7 +193,7 @@ public class MaxRetryAllocationDeciderTests extends ESAllocationTestCase {
|
|||
assertEquals(unassignedPrimary.unassignedInfo().getMessage(), "boom");
|
||||
// MaxRetryAllocationDecider#canForceAllocatePrimary should return a NO decision because canAllocate returns NO here
|
||||
assertEquals(Decision.NO, new MaxRetryAllocationDecider(Settings.EMPTY).canForceAllocatePrimary(
|
||||
unassignedPrimary, null, new RoutingAllocation(null, null, clusterState, null, 0, false)));
|
||||
unassignedPrimary, null, new RoutingAllocation(null, null, clusterState, null, 0)));
|
||||
}
|
||||
|
||||
// change the settings and ensure we can do another round of allocation for that index.
|
||||
|
@ -201,7 +215,7 @@ public class MaxRetryAllocationDeciderTests extends ESAllocationTestCase {
|
|||
assertEquals(unassignedPrimary.unassignedInfo().getMessage(), "boom");
|
||||
// bumped up the max retry count, so canForceAllocatePrimary should return a YES decision
|
||||
assertEquals(Decision.YES, new MaxRetryAllocationDecider(Settings.EMPTY).canForceAllocatePrimary(
|
||||
routingTable.index("idx").shard(0).shards().get(0), null, new RoutingAllocation(null, null, clusterState, null, 0, false)));
|
||||
routingTable.index("idx").shard(0).shards().get(0), null, new RoutingAllocation(null, null, clusterState, null, 0)));
|
||||
|
||||
// now we start the shard
|
||||
clusterState = strategy.applyStartedShards(clusterState, Collections.singletonList(
|
||||
|
@ -228,7 +242,7 @@ public class MaxRetryAllocationDeciderTests extends ESAllocationTestCase {
|
|||
assertEquals(unassignedPrimary.unassignedInfo().getMessage(), "ZOOOMG");
|
||||
// Counter reset, so MaxRetryAllocationDecider#canForceAllocatePrimary should return a YES decision
|
||||
assertEquals(Decision.YES, new MaxRetryAllocationDecider(Settings.EMPTY).canForceAllocatePrimary(
|
||||
unassignedPrimary, null, new RoutingAllocation(null, null, clusterState, null, 0, false)));
|
||||
unassignedPrimary, null, new RoutingAllocation(null, null, clusterState, null, 0)));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -106,8 +106,7 @@ public class SameShardRoutingTests extends ESAllocationTestCase {
|
|||
ShardRouting primaryShard = clusterState.routingTable().index(index).shard(0).primaryShard();
|
||||
RoutingNode routingNode = clusterState.getRoutingNodes().node(primaryShard.currentNodeId());
|
||||
RoutingAllocation routingAllocation = new RoutingAllocation(new AllocationDeciders(Settings.EMPTY, Collections.emptyList()),
|
||||
new RoutingNodes(clusterState, false), clusterState, ClusterInfo.EMPTY, System.nanoTime(), false
|
||||
);
|
||||
new RoutingNodes(clusterState, false), clusterState, ClusterInfo.EMPTY, System.nanoTime());
|
||||
|
||||
// can't force allocate same shard copy to the same node
|
||||
ShardRouting newPrimary = TestShardRouting.newShardRouting(primaryShard.shardId(), null, true, ShardRoutingState.UNASSIGNED);
|
||||
|
|
|
@ -841,7 +841,7 @@ public class DiskThresholdDeciderTests extends ESAllocationTestCase {
|
|||
);
|
||||
ClusterState clusterState = ClusterState.builder(baseClusterState).routingTable(builder.build()).build();
|
||||
RoutingAllocation routingAllocation = new RoutingAllocation(null, new RoutingNodes(clusterState), clusterState, clusterInfo,
|
||||
System.nanoTime(), false);
|
||||
System.nanoTime());
|
||||
routingAllocation.debugDecision(true);
|
||||
Decision decision = diskThresholdDecider.canRemain(firstRouting, firstRoutingNode, routingAllocation);
|
||||
assertThat(decision.type(), equalTo(Decision.Type.NO));
|
||||
|
@ -867,8 +867,7 @@ public class DiskThresholdDeciderTests extends ESAllocationTestCase {
|
|||
)
|
||||
);
|
||||
clusterState = ClusterState.builder(baseClusterState).routingTable(builder.build()).build();
|
||||
routingAllocation = new RoutingAllocation(null, new RoutingNodes(clusterState), clusterState, clusterInfo, System.nanoTime(),
|
||||
false);
|
||||
routingAllocation = new RoutingAllocation(null, new RoutingNodes(clusterState), clusterState, clusterInfo, System.nanoTime());
|
||||
routingAllocation.debugDecision(true);
|
||||
decision = diskThresholdDecider.canRemain(firstRouting, firstRoutingNode, routingAllocation);
|
||||
assertThat(decision.type(), equalTo(Decision.Type.YES));
|
||||
|
@ -976,7 +975,7 @@ public class DiskThresholdDeciderTests extends ESAllocationTestCase {
|
|||
);
|
||||
ClusterState clusterState = ClusterState.builder(baseClusterState).routingTable(builder.build()).build();
|
||||
RoutingAllocation routingAllocation = new RoutingAllocation(null, new RoutingNodes(clusterState), clusterState, clusterInfo,
|
||||
System.nanoTime(), false);
|
||||
System.nanoTime());
|
||||
routingAllocation.debugDecision(true);
|
||||
Decision decision = diskThresholdDecider.canRemain(firstRouting, firstRoutingNode, routingAllocation);
|
||||
|
||||
|
@ -1036,8 +1035,7 @@ public class DiskThresholdDeciderTests extends ESAllocationTestCase {
|
|||
);
|
||||
|
||||
clusterState = ClusterState.builder(updateClusterState).routingTable(builder.build()).build();
|
||||
routingAllocation = new RoutingAllocation(null, new RoutingNodes(clusterState), clusterState, clusterInfo, System.nanoTime(),
|
||||
false);
|
||||
routingAllocation = new RoutingAllocation(null, new RoutingNodes(clusterState), clusterState, clusterInfo, System.nanoTime());
|
||||
routingAllocation.debugDecision(true);
|
||||
decision = diskThresholdDecider.canRemain(firstRouting, firstRoutingNode, routingAllocation);
|
||||
assertThat(decision.type(), equalTo(Decision.Type.YES));
|
||||
|
|
|
@ -98,7 +98,7 @@ public class DiskThresholdDeciderUnitTests extends ESAllocationTestCase {
|
|||
ImmutableOpenMap.Builder<String, Long> shardSizes = ImmutableOpenMap.builder();
|
||||
shardSizes.put("[test][0][p]", 10L); // 10 bytes
|
||||
final ClusterInfo clusterInfo = new ClusterInfo(leastAvailableUsages.build(), mostAvailableUsage.build(), shardSizes.build(), ImmutableOpenMap.of());
|
||||
RoutingAllocation allocation = new RoutingAllocation(new AllocationDeciders(Settings.EMPTY, Collections.singleton(decider)), clusterState.getRoutingNodes(), clusterState, clusterInfo, System.nanoTime(), false);
|
||||
RoutingAllocation allocation = new RoutingAllocation(new AllocationDeciders(Settings.EMPTY, Collections.singleton(decider)), clusterState.getRoutingNodes(), clusterState, clusterInfo, System.nanoTime());
|
||||
allocation.debugDecision(true);
|
||||
Decision decision = decider.canAllocate(test_0, new RoutingNode("node_0", node_0), allocation);
|
||||
assertEquals(mostAvailableUsage.toString(), Decision.Type.YES, decision.type());
|
||||
|
@ -172,7 +172,7 @@ public class DiskThresholdDeciderUnitTests extends ESAllocationTestCase {
|
|||
shardSizes.put("[test][2][p]", 10L);
|
||||
|
||||
final ClusterInfo clusterInfo = new ClusterInfo(leastAvailableUsages.build(), mostAvailableUsage.build(), shardSizes.build(), shardRoutingMap.build());
|
||||
RoutingAllocation allocation = new RoutingAllocation(new AllocationDeciders(Settings.EMPTY, Collections.singleton(decider)), clusterState.getRoutingNodes(), clusterState, clusterInfo, System.nanoTime(), false);
|
||||
RoutingAllocation allocation = new RoutingAllocation(new AllocationDeciders(Settings.EMPTY, Collections.singleton(decider)), clusterState.getRoutingNodes(), clusterState, clusterInfo, System.nanoTime());
|
||||
allocation.debugDecision(true);
|
||||
Decision decision = decider.canRemain(test_0, new RoutingNode("node_0", node_0), allocation);
|
||||
assertEquals(Decision.Type.YES, decision.type());
|
||||
|
@ -224,7 +224,7 @@ public class DiskThresholdDeciderUnitTests extends ESAllocationTestCase {
|
|||
routingTableBuilder.addAsNew(metaData.index("other"));
|
||||
ClusterState clusterState = ClusterState.builder(org.elasticsearch.cluster.ClusterName.CLUSTER_NAME_SETTING.getDefault(Settings.EMPTY))
|
||||
.metaData(metaData).routingTable(routingTableBuilder.build()).build();
|
||||
RoutingAllocation allocation = new RoutingAllocation(null, null, clusterState, info, 0, false);
|
||||
RoutingAllocation allocation = new RoutingAllocation(null, null, clusterState, info, 0);
|
||||
|
||||
final Index index = new Index("test", "1234");
|
||||
ShardRouting test_0 = ShardRouting.newUnassigned(new ShardId(index, 0), false, PeerRecoverySource.INSTANCE, new UnassignedInfo(UnassignedInfo.Reason.INDEX_CREATED, "foo"));
|
||||
|
@ -305,7 +305,7 @@ public class DiskThresholdDeciderUnitTests extends ESAllocationTestCase {
|
|||
clusterState = allocationService.applyStartedShards(clusterState,
|
||||
clusterState.getRoutingTable().index("test").shardsWithState(ShardRoutingState.UNASSIGNED));
|
||||
|
||||
RoutingAllocation allocation = new RoutingAllocation(null, clusterState.getRoutingNodes(), clusterState, info, 0, false);
|
||||
RoutingAllocation allocation = new RoutingAllocation(null, clusterState.getRoutingNodes(), clusterState, info, 0);
|
||||
|
||||
final Index index = new Index("test", "1234");
|
||||
ShardRouting test_0 = ShardRouting.newUnassigned(new ShardId(index, 0), true,
|
||||
|
|
|
@ -73,7 +73,7 @@ public class FilterAllocationDeciderTests extends ESAllocationTestCase {
|
|||
|
||||
// after failing the shard we are unassigned since the node is blacklisted and we can't initialize on the other node
|
||||
RoutingAllocation allocation = new RoutingAllocation(allocationDeciders, state.getRoutingNodes(), state,
|
||||
null, 0, false);
|
||||
null, 0);
|
||||
allocation.debugDecision(true);
|
||||
Decision.Single decision = (Decision.Single) filterAllocationDecider.canAllocate(
|
||||
routingTable.index("idx").shard(0).primaryShard(),
|
||||
|
@ -124,7 +124,7 @@ public class FilterAllocationDeciderTests extends ESAllocationTestCase {
|
|||
assertEquals(routingTable.index("idx").shard(0).primaryShard().currentNodeId(), "node1");
|
||||
|
||||
allocation = new RoutingAllocation(allocationDeciders, state.getRoutingNodes(), state,
|
||||
null, 0, false);
|
||||
null, 0);
|
||||
allocation.debugDecision(true);
|
||||
decision = (Decision.Single) filterAllocationDecider.canAllocate(
|
||||
routingTable.index("idx").shard(0).shards().get(0),
|
||||
|
|
|
@ -388,7 +388,7 @@ public class PrimaryShardAllocatorTests extends ESAllocationTestCase {
|
|||
.metaData(metaData)
|
||||
.routingTable(routingTable)
|
||||
.nodes(DiscoveryNodes.builder().add(node1).add(node2).add(node3)).build();
|
||||
return new RoutingAllocation(allocationDeciders, new RoutingNodes(state, false), state, null, System.nanoTime(), false);
|
||||
return new RoutingAllocation(allocationDeciders, new RoutingNodes(state, false), state, null, System.nanoTime());
|
||||
}
|
||||
|
||||
private RoutingAllocation routingAllocationWithOnePrimaryNoReplicas(AllocationDeciders deciders, UnassignedInfo.Reason reason,
|
||||
|
@ -416,7 +416,7 @@ public class PrimaryShardAllocatorTests extends ESAllocationTestCase {
|
|||
.metaData(metaData)
|
||||
.routingTable(routingTableBuilder.build())
|
||||
.nodes(DiscoveryNodes.builder().add(node1).add(node2).add(node3)).build();
|
||||
return new RoutingAllocation(deciders, new RoutingNodes(state, false), state, null, System.nanoTime(), false);
|
||||
return new RoutingAllocation(deciders, new RoutingNodes(state, false), state, null, System.nanoTime());
|
||||
}
|
||||
|
||||
private void assertClusterHealthStatus(RoutingAllocation allocation, ClusterHealthStatus expectedStatus) {
|
||||
|
|
|
@ -316,7 +316,7 @@ public class ReplicaShardAllocatorTests extends ESAllocationTestCase {
|
|||
.metaData(metaData)
|
||||
.routingTable(routingTable)
|
||||
.nodes(DiscoveryNodes.builder().add(node1).add(node2).add(node3)).build();
|
||||
return new RoutingAllocation(deciders, new RoutingNodes(state, false), state, ClusterInfo.EMPTY, System.nanoTime(), false);
|
||||
return new RoutingAllocation(deciders, new RoutingNodes(state, false), state, ClusterInfo.EMPTY, System.nanoTime());
|
||||
}
|
||||
|
||||
private RoutingAllocation onePrimaryOnNode1And1ReplicaRecovering(AllocationDeciders deciders) {
|
||||
|
@ -338,7 +338,7 @@ public class ReplicaShardAllocatorTests extends ESAllocationTestCase {
|
|||
.metaData(metaData)
|
||||
.routingTable(routingTable)
|
||||
.nodes(DiscoveryNodes.builder().add(node1).add(node2).add(node3)).build();
|
||||
return new RoutingAllocation(deciders, new RoutingNodes(state, false), state, ClusterInfo.EMPTY, System.nanoTime(), false);
|
||||
return new RoutingAllocation(deciders, new RoutingNodes(state, false), state, ClusterInfo.EMPTY, System.nanoTime());
|
||||
}
|
||||
|
||||
class TestAllocator extends ReplicaShardAllocator {
|
||||
|
|
|
@ -107,7 +107,7 @@ public class RareClusterStateIT extends ESIntegTestCase {
|
|||
.nodes(DiscoveryNodes.EMPTY_NODES)
|
||||
.build(), false
|
||||
);
|
||||
RoutingAllocation routingAllocation = new RoutingAllocation(allocationDeciders, routingNodes, current, ClusterInfo.EMPTY, System.nanoTime(), false);
|
||||
RoutingAllocation routingAllocation = new RoutingAllocation(allocationDeciders, routingNodes, current, ClusterInfo.EMPTY, System.nanoTime());
|
||||
allocator.allocateUnassigned(routingAllocation);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue