Skip to content

Commit f59d3c6

Browse files
authored
Merge branch 'main' into docs-profiler
2 parents 19d8bca + 67fca83 commit f59d3c6

File tree

4 files changed

+34
-16
lines changed

4 files changed

+34
-16
lines changed

muted-tests.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,9 @@ tests:
405405
- class: org.elasticsearch.search.SearchWithRejectionsIT
406406
method: testOpenContextsAfterRejections
407407
issue: https://github.com/elastic/elasticsearch/issues/126340
408+
- class: org.elasticsearch.xpack.ilm.ClusterStateWaitThresholdBreachTests
409+
method: testWaitInShrunkShardsAllocatedExceedsThreshold
410+
issue: https://github.com/elastic/elasticsearch/issues/126348
408411

409412
# Examples:
410413
#

server/src/main/java/org/elasticsearch/cluster/metadata/IndexReshardingMetadata.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.elasticsearch.common.io.stream.StreamInput;
1313
import org.elasticsearch.common.io.stream.StreamOutput;
1414
import org.elasticsearch.common.io.stream.Writeable;
15+
import org.elasticsearch.core.Nullable;
1516
import org.elasticsearch.index.shard.ShardId;
1617
import org.elasticsearch.xcontent.ConstructingObjectParser;
1718
import org.elasticsearch.xcontent.ParseField;
@@ -20,7 +21,6 @@
2021
import org.elasticsearch.xcontent.XContentParser;
2122

2223
import java.io.IOException;
23-
import java.util.Arrays;
2424
import java.util.Objects;
2525

2626
/**
@@ -207,16 +207,18 @@ public static IndexReshardingMetadata newSplitByMultiple(int shardCount, int mul
207207
return new IndexReshardingMetadata(IndexReshardingState.Split.newSplitByMultiple(shardCount, multiple));
208208
}
209209

210-
public IndexReshardingMetadata transitionSplitTargetToHandoff(ShardId shardId) {
210+
public static boolean isSplitTarget(ShardId shardId, @Nullable IndexReshardingMetadata reshardingMetadata) {
211+
return reshardingMetadata != null && reshardingMetadata.isSplit() && reshardingMetadata.getSplit().isTargetShard(shardId.id());
212+
}
213+
214+
public IndexReshardingMetadata transitionSplitTargetToNewState(
215+
ShardId shardId,
216+
IndexReshardingState.Split.TargetShardState newTargetState
217+
) {
211218
assert state instanceof IndexReshardingState.Split;
212-
IndexReshardingState.Split splitState = (IndexReshardingState.Split) state;
213-
IndexReshardingState.Split.TargetShardState[] newTargets = Arrays.copyOf(
214-
splitState.targetShards(),
215-
splitState.targetShards().length
216-
);
217-
int i = shardId.getId() - state.shardCountBefore();
218-
newTargets[i] = IndexReshardingState.Split.TargetShardState.HANDOFF;
219-
return new IndexReshardingMetadata(new IndexReshardingState.Split(splitState.sourceShards(), newTargets));
219+
IndexReshardingState.Split.Builder builder = new IndexReshardingState.Split.Builder((IndexReshardingState.Split) state);
220+
builder.setTargetShardState(shardId.getId(), newTargetState);
221+
return new IndexReshardingMetadata(builder.build());
220222
}
221223

222224
/**

server/src/main/java/org/elasticsearch/cluster/metadata/IndexReshardingState.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.Arrays;
2424
import java.util.List;
2525
import java.util.Objects;
26+
import java.util.stream.Stream;
2627

2728
/**
2829
* IndexReshardingState is an abstract class holding the persistent state of a generic resharding operation. It contains
@@ -366,6 +367,10 @@ public TargetShardState getTargetShardState(int shardNum) {
366367
return targetShards[targetShardNum];
367368
}
368369

370+
public boolean targetStateAtLeast(int shardNum, TargetShardState targetShardState) {
371+
return getTargetShardState(shardNum).ordinal() >= targetShardState.ordinal();
372+
}
373+
369374
/**
370375
* Check whether this metadata represents an incomplete split
371376
* @return true if the split is incomplete (not all source shards are DONE)
@@ -380,6 +385,10 @@ public boolean inProgress() {
380385
return false;
381386
}
382387

388+
public Stream<TargetShardState> targetStates() {
389+
return Arrays.stream(targetShards);
390+
}
391+
383392
/**
384393
* Check whether all target shards for the given source shard are done.
385394
* @param shardNum a source shard index greater than or equal to 0 and less than the original shard count

server/src/test/java/org/elasticsearch/cluster/metadata/IndexReshardingMetadataTests.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@ public void testSplit() {
2121
var split = metadata.getSplit();
2222

2323
// starting state is as expected
24-
assert metadata.shardCountBefore() == numShards;
25-
assert metadata.shardCountAfter() == numShards * multiple;
24+
assertEquals(numShards, metadata.shardCountBefore());
25+
assertEquals(numShards * multiple, metadata.shardCountAfter());
2626
for (int i = 0; i < numShards; i++) {
27-
assert split.getSourceShardState(i) == IndexReshardingState.Split.SourceShardState.SOURCE;
27+
assertSame(IndexReshardingState.Split.SourceShardState.SOURCE, split.getSourceShardState(i));
28+
assertFalse(split.isTargetShard(i));
2829
}
2930
for (int i = numShards; i < numShards * multiple; i++) {
30-
assert split.getTargetShardState(i) == IndexReshardingState.Split.TargetShardState.CLONE;
31+
assertSame(IndexReshardingState.Split.TargetShardState.CLONE, split.getTargetShardState(i));
32+
assertTrue(split.isTargetShard(i));
3133
}
3234

3335
// advance split state randomly and expect to terminate
@@ -62,10 +64,12 @@ public void testSplit() {
6264
}
6365

6466
for (int i = 0; i < numShards; i++) {
65-
assert split.getSourceShardState(i) == IndexReshardingState.Split.SourceShardState.DONE;
67+
assertSame(IndexReshardingState.Split.SourceShardState.DONE, split.getSourceShardState(i));
68+
assertFalse(split.isTargetShard(i));
6669
}
6770
for (int i = numShards; i < numShards * multiple; i++) {
68-
assert split.getTargetShardState(i) == IndexReshardingState.Split.TargetShardState.DONE;
71+
assertSame(IndexReshardingState.Split.TargetShardState.DONE, split.getTargetShardState(i));
72+
assertTrue(split.isTargetShard(i));
6973
}
7074
}
7175
}

0 commit comments

Comments
 (0)