Skip to content

Commit f2b1472

Browse files
ESIntegTestCase#getShardSegments
1 parent 79f8462 commit f2b1472

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

server/src/internalClusterTest/java/org/elasticsearch/index/engine/InternalEngineMergeIT.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,12 @@ public void testMergesUseTheMergeThreadPool() throws Exception {
131131
forceMerge();
132132
refresh(indexName);
133133

134+
// after a force merge there should only be 1 segment per shard
135+
var shardsWithMultipleSegments = getShardSegments().stream()
136+
.filter(shardSegments -> shardSegments.getSegments().size() > 1)
137+
.toList();
138+
assertTrue("there are shards with multiple segments " + shardsWithMultipleSegments, shardsWithMultipleSegments.isEmpty());
139+
134140
final long expectedTotalDocs = totalDocs;
135141
assertHitCount(prepareSearch(indexName).setQuery(QueryBuilders.matchAllQuery()).setTrackTotalHits(true), expectedTotalDocs);
136142

test/framework/src/main/java/org/elasticsearch/test/ESIntegTestCase.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,11 @@
99

1010
package org.elasticsearch.test;
1111

12-
import io.netty.util.ThreadDeathWatcher;
13-
import io.netty.util.concurrent.GlobalEventExecutor;
14-
1512
import com.carrotsearch.randomizedtesting.RandomizedContext;
1613
import com.carrotsearch.randomizedtesting.generators.RandomNumbers;
1714
import com.carrotsearch.randomizedtesting.generators.RandomPicks;
18-
15+
import io.netty.util.ThreadDeathWatcher;
16+
import io.netty.util.concurrent.GlobalEventExecutor;
1917
import org.apache.http.HttpHost;
2018
import org.apache.logging.log4j.Logger;
2119
import org.apache.lucene.search.Sort;
@@ -1594,9 +1592,29 @@ protected BroadcastResponse forceMerge() {
15941592
waitForRelocation();
15951593
BroadcastResponse actionGet = indicesAdmin().prepareForceMerge().setMaxNumSegments(1).get();
15961594
assertNoFailures(actionGet);
1595+
if (randomBoolean()) {
1596+
// after a force merge there should only be 1 segment per shard
1597+
var shardsWithMultipleSegments = getShardSegments().stream()
1598+
.filter(shardSegments -> shardSegments.getSegments().size() > 1)
1599+
.toList();
1600+
assertTrue("there are shards with multiple segments " + shardsWithMultipleSegments, shardsWithMultipleSegments.isEmpty());
1601+
}
15971602
return actionGet;
15981603
}
15991604

1605+
/**
1606+
* Returns the segments of the shards of the indices.
1607+
*/
1608+
protected List<ShardSegments> getShardSegments(String... indices) {
1609+
IndicesSegmentResponse indicesSegmentResponse = indicesAdmin().prepareSegments(indices).get();
1610+
return indicesSegmentResponse.getIndices()
1611+
.values()
1612+
.stream()
1613+
.flatMap(indexSegments -> indexSegments.getShards().values().stream())
1614+
.flatMap(indexShardSegments -> Stream.of(indexShardSegments.shards()))
1615+
.toList();
1616+
}
1617+
16001618
/**
16011619
* Returns <code>true</code> iff the given index exists otherwise <code>false</code>
16021620
*/

0 commit comments

Comments
 (0)