Assert given input shards and indices are consistent. Also, fixed the equality check for SnapshotsInProgress. Before this change the tests never had more than a single waiting shard per index so they never failed as a result of the waiting shards list not being ordered. Follow up to #47552
This commit is contained in:
parent
736fceb18b
commit
6bd033931b
|
@ -41,9 +41,12 @@ import java.util.ArrayList;
|
|||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.elasticsearch.snapshots.SnapshotInfo.METADATA_FIELD_INTRODUCED;
|
||||
|
||||
|
@ -105,12 +108,25 @@ public class SnapshotsInProgress extends AbstractNamedDiffable<Custom> implement
|
|||
} else {
|
||||
this.shards = shards;
|
||||
this.waitingIndices = findWaitingIndices(shards);
|
||||
assert assertShardsConsistent(state, indices, shards);
|
||||
}
|
||||
this.repositoryStateId = repositoryStateId;
|
||||
this.failure = failure;
|
||||
this.userMetadata = userMetadata;
|
||||
}
|
||||
|
||||
private static boolean assertShardsConsistent(State state, List<IndexId> indices,
|
||||
ImmutableOpenMap<ShardId, ShardSnapshotStatus> shards) {
|
||||
if ((state == State.INIT || state == State.ABORTED) && shards.isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
final Set<String> indexNames = indices.stream().map(IndexId::getName).collect(Collectors.toSet());
|
||||
final Set<String> indexNamesInShards = new HashSet<>();
|
||||
shards.keysIt().forEachRemaining(s -> indexNamesInShards.add(s.getIndexName()));
|
||||
assert indexNames.equals(indexNamesInShards)
|
||||
: "Indices in shards " + indexNamesInShards + " differ from expected indices " + indexNames + " for state [" + state + "]";
|
||||
return true;
|
||||
}
|
||||
public Entry(Snapshot snapshot, boolean includeGlobalState, boolean partial, State state, List<IndexId> indices,
|
||||
long startTime, long repositoryStateId, ImmutableOpenMap<ShardId, ShardSnapshotStatus> shards,
|
||||
Map<String, Object> userMetadata) {
|
||||
|
@ -189,7 +205,6 @@ public class SnapshotsInProgress extends AbstractNamedDiffable<Custom> implement
|
|||
if (!shards.equals(entry.shards)) return false;
|
||||
if (!snapshot.equals(entry.snapshot)) return false;
|
||||
if (state != entry.state) return false;
|
||||
if (!waitingIndices.equals(entry.waitingIndices)) return false;
|
||||
if (repositoryStateId != entry.repositoryStateId) return false;
|
||||
|
||||
return true;
|
||||
|
@ -203,7 +218,6 @@ public class SnapshotsInProgress extends AbstractNamedDiffable<Custom> implement
|
|||
result = 31 * result + (partial ? 1 : 0);
|
||||
result = 31 * result + shards.hashCode();
|
||||
result = 31 * result + indices.hashCode();
|
||||
result = 31 * result + waitingIndices.hashCode();
|
||||
result = 31 * result + Long.hashCode(startTime);
|
||||
result = 31 * result + Long.hashCode(repositoryStateId);
|
||||
return result;
|
||||
|
|
|
@ -36,6 +36,7 @@ import org.elasticsearch.test.AbstractDiffableWireSerializationTestCase;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class SnapshotsInProgressSerializationTests extends AbstractDiffableWireSerializationTestCase<Custom> {
|
||||
|
||||
|
@ -62,13 +63,17 @@ public class SnapshotsInProgressSerializationTests extends AbstractDiffableWireS
|
|||
long startTime = randomLong();
|
||||
long repositoryStateId = randomLong();
|
||||
ImmutableOpenMap.Builder<ShardId, SnapshotsInProgress.ShardSnapshotStatus> builder = ImmutableOpenMap.builder();
|
||||
int shardsCount = randomIntBetween(0, 10);
|
||||
for (int j = 0; j < shardsCount; j++) {
|
||||
ShardId shardId = new ShardId(new Index(randomAlphaOfLength(10), randomAlphaOfLength(10)), randomIntBetween(0, 10));
|
||||
String nodeId = randomAlphaOfLength(10);
|
||||
ShardState shardState = randomFrom(ShardState.values());
|
||||
builder.put(shardId, new SnapshotsInProgress.ShardSnapshotStatus(nodeId, shardState,
|
||||
shardState.failed() ? randomAlphaOfLength(10) : null));
|
||||
final List<Index> esIndices =
|
||||
indices.stream().map(i -> new Index(i.getName(), randomAlphaOfLength(10))).collect(Collectors.toList());
|
||||
for (Index idx : esIndices) {
|
||||
int shardsCount = randomIntBetween(1, 10);
|
||||
for (int j = 0; j < shardsCount; j++) {
|
||||
ShardId shardId = new ShardId(idx, j);
|
||||
String nodeId = randomAlphaOfLength(10);
|
||||
ShardState shardState = randomFrom(ShardState.values());
|
||||
builder.put(shardId, new SnapshotsInProgress.ShardSnapshotStatus(nodeId, shardState,
|
||||
shardState.failed() ? randomAlphaOfLength(10) : null));
|
||||
}
|
||||
}
|
||||
ImmutableOpenMap<ShardId, SnapshotsInProgress.ShardSnapshotStatus> shards = builder.build();
|
||||
return new Entry(snapshot, includeGlobalState, partial, state, indices, startTime, repositoryStateId, shards,
|
||||
|
|
Loading…
Reference in New Issue