Skip to content

Commit aacd761

Browse files
authored
Honour max segment size when setting only_expunge_deletes on force merge (elastic#77478)
This commit changes the es merge policy to apply the maximum segment size on force merges that only expunge deletes (forceMergeDeletes). This option is useful for read-write use cases that wants to reclaim deleted docs more aggressively than the `index.merge.policy.deletes_pct_allowed`. Closes elastic#61764 Relates elastic#77270
1 parent b91b899 commit aacd761

File tree

3 files changed

+6
-4
lines changed

3 files changed

+6
-4
lines changed

docs/reference/indices/forcemerge.asciidoc

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ If so, executes it.
123123
--
124124
(Optional, Boolean)
125125
If `true`,
126-
only expunge segments containing document deletions.
126+
expunge all segments containing more than `index.merge.policy.expunge_deletes_allowed`
127+
(default to 10) percents of deleted documents.
127128
Defaults to `false`.
128129

129130
In Lucene,
@@ -133,8 +134,6 @@ During a merge,
133134
a new segment is created
134135
that does not contain those document deletions.
135136

136-
NOTE: This parameter does *not* override the
137-
`index.merge.policy.expunge_deletes_allowed` setting.
138137
--
139138

140139

server/src/main/java/org/elasticsearch/index/EsTieredMergePolicy.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ public MergeSpecification findForcedMerges(SegmentInfos infos, int maxSegmentCou
4141

4242
@Override
4343
public MergeSpecification findForcedDeletesMerges(SegmentInfos infos, MergeContext mergeContext) throws IOException {
44-
return forcedMergePolicy.findForcedDeletesMerges(infos, mergeContext);
44+
// we apply the max segment size through the regular merge policy in
45+
// order to avoid giant segments when expunging deletes on a read/write index
46+
return regularMergePolicy.findForcedDeletesMerges(infos, mergeContext);
4547
}
4648

4749
public void setForceMergeDeletesPctAllowed(double forceMergeDeletesPctAllowed) {

server/src/test/java/org/elasticsearch/index/EsTieredMergePolicyTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public void testSetForceMergeDeletesPctAllowed() {
3232
EsTieredMergePolicy policy = new EsTieredMergePolicy();
3333
policy.setForceMergeDeletesPctAllowed(42);
3434
assertEquals(42, policy.forcedMergePolicy.getForceMergeDeletesPctAllowed(), 0);
35+
assertEquals(42, policy.regularMergePolicy.getForceMergeDeletesPctAllowed(), 0);
3536
}
3637

3738
public void testSetFloorSegmentMB() {

0 commit comments

Comments
 (0)