Skip to content

Commit 2ddf3a9

Browse files
committed
Core: throttle delete-by-query when merges are falling behind
Delete-by-query is incredibly costly because it forces a refresh each time, so if you are also indexing this can cause massive segment explosion. This change throttles delete-by-query when merges can't keep up. It's likely not enough (elastic#7052 is the long-term solution) but can only help. Closes elastic#9986
1 parent 6d1ae29 commit 2ddf3a9

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

src/main/java/org/elasticsearch/index/engine/internal/InternalEngine.java

+13
Original file line numberDiff line numberDiff line change
@@ -618,6 +618,7 @@ public void delete(Delete delete) throws EngineException {
618618
if (writer == null) {
619619
throw new EngineClosedException(shardId, failedEngine);
620620
}
621+
// NOTE: we don't throttle this when merges fall behind because delete-by-id does not create new segments:
621622
innerDelete(delete, writer);
622623
dirty = true;
623624
possibleMergeNeeded = true;
@@ -690,7 +691,19 @@ public void delete(DeleteByQuery delete) throws EngineException {
690691
if (writer == null) {
691692
throw new EngineClosedException(shardId);
692693
}
694+
if (delete.origin() == Operation.Origin.RECOVERY) {
695+
// Don't throttle recovery operations
696+
innerDelete(delete, writer);
697+
} else {
698+
try (Releasable r = throttle.acquireThrottle()) {
699+
innerDelete(delete, writer);
700+
}
701+
}
702+
}
703+
}
693704

705+
private void innerDelete(DeleteByQuery delete, IndexWriter writer) throws EngineException {
706+
try {
694707
Query query;
695708
if (delete.nested() && delete.aliasFilter() != null) {
696709
query = new IncludeNestedDocsQuery(new XFilteredQuery(delete.query(), delete.aliasFilter()), delete.parentFilter());

0 commit comments

Comments
 (0)