|
14 | 14 | import org.elasticsearch.xcontent.XContentParser;
|
15 | 15 |
|
16 | 16 | import java.io.IOException;
|
| 17 | +import java.util.Arrays; |
| 18 | +import java.util.stream.IntStream; |
17 | 19 |
|
18 | 20 | public class IndexReshardingMetadataSerializationTests extends AbstractXContentSerializingTestCase<IndexReshardingMetadata> {
|
19 | 21 | @Override
|
@@ -46,6 +48,10 @@ private IndexReshardingState.Split createTestSplit() {
|
46 | 48 | for (int i = 0; i < oldShards; i++) {
|
47 | 49 | sourceShardStates[i] = randomFrom(IndexReshardingState.Split.SourceShardState.values());
|
48 | 50 | }
|
| 51 | + // All sources done is an invalid state, will fail assert in Split constructor |
| 52 | + if (Arrays.stream(sourceShardStates).allMatch(state -> state == IndexReshardingState.Split.SourceShardState.DONE)) { |
| 53 | + sourceShardStates[0] = IndexReshardingState.Split.SourceShardState.SOURCE; |
| 54 | + } |
49 | 55 | for (int i = 0; i < targetShardStates.length; i++) {
|
50 | 56 | targetShardStates[i] = randomFrom(IndexReshardingState.Split.TargetShardState.values());
|
51 | 57 | }
|
@@ -74,16 +80,18 @@ enum Mutation {
|
74 | 80 | var sourceShardStates = split.sourceShards().clone();
|
75 | 81 | var targetShardStates = split.targetShards().clone();
|
76 | 82 |
|
77 |
| - switch (randomFrom(Mutation.values())) { |
78 |
| - case SOURCE_SHARD_STATES: |
79 |
| - var is = randomInt(sourceShardStates.length - 1); |
80 |
| - sourceShardStates[is] = IndexReshardingState.Split.SourceShardState.values()[(sourceShardStates[is].ordinal() + 1) |
81 |
| - % IndexReshardingState.Split.SourceShardState.values().length]; |
82 |
| - break; |
83 |
| - case TARGET_SHARD_STATES: |
84 |
| - var it = randomInt(targetShardStates.length - 1); |
85 |
| - targetShardStates[it] = IndexReshardingState.Split.TargetShardState.values()[(targetShardStates[it].ordinal() + 1) |
86 |
| - % IndexReshardingState.Split.TargetShardState.values().length]; |
| 83 | + var is = randomInt(sourceShardStates.length - 1); |
| 84 | + boolean allOtherSourcesDone = IntStream.range(0, sourceShardStates.length) |
| 85 | + .filter(i -> i != is) |
| 86 | + .allMatch(i -> sourceShardStates[i] == IndexReshardingState.Split.SourceShardState.DONE); |
| 87 | + // All sources done is an invalid state, will fail assert in Split constructor |
| 88 | + if (allOtherSourcesDone || randomFrom(Mutation.values()) == Mutation.TARGET_SHARD_STATES) { |
| 89 | + var it = randomInt(targetShardStates.length - 1); |
| 90 | + targetShardStates[it] = IndexReshardingState.Split.TargetShardState.values()[(targetShardStates[it].ordinal() + 1) |
| 91 | + % IndexReshardingState.Split.TargetShardState.values().length]; |
| 92 | + } else { |
| 93 | + sourceShardStates[is] = IndexReshardingState.Split.SourceShardState.values()[(sourceShardStates[is].ordinal() + 1) |
| 94 | + % IndexReshardingState.Split.SourceShardState.values().length]; |
87 | 95 | }
|
88 | 96 |
|
89 | 97 | return new IndexReshardingState.Split(sourceShardStates, targetShardStates);
|
|
0 commit comments