|
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