Skip to content

Commit 49d69bf

Browse files
committed
Actually close IndexAnalyzers contents (#43914)
IndexAnalyzers has a close() method that should iterate through all its wrapped analyzers and close each one in turn. However, instead of delegating to the analyzers' close() methods, it instead wraps them in a Closeable interface, which just returns a list of the analyzers. In addition, whitespace normalizers are ignored entirely.
1 parent 3250cc5 commit 49d69bf

File tree

2 files changed

+42
-3
lines changed

2 files changed

+42
-3
lines changed

server/src/main/java/org/elasticsearch/index/analysis/IndexAnalyzers.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.io.IOException;
2525
import java.util.Map;
2626
import java.util.Objects;
27+
import java.util.stream.Collectors;
2728
import java.util.stream.Stream;
2829

2930
import static java.util.Collections.unmodifiableMap;
@@ -106,8 +107,9 @@ public NamedAnalyzer getDefaultSearchQuoteAnalyzer() {
106107

107108
@Override
108109
public void close() throws IOException {
109-
IOUtils.close(() -> Stream.concat(analyzers.values().stream(), normalizers.values().stream())
110-
.filter(a -> a.scope() == AnalyzerScope.INDEX)
111-
.iterator());
110+
IOUtils.close(Stream.of(analyzers.values().stream(), normalizers.values().stream(), whitespaceNormalizers.values().stream())
111+
.flatMap(s -> s)
112+
.filter(a -> a.scope() == AnalyzerScope.INDEX)
113+
.collect(Collectors.toList()));
112114
}
113115
}

server/src/test/java/org/elasticsearch/index/analysis/IndexAnalyzersTests.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,16 @@
1919

2020
package org.elasticsearch.index.analysis;
2121

22+
import org.apache.lucene.analysis.core.KeywordAnalyzer;
23+
import org.apache.lucene.analysis.core.WhitespaceAnalyzer;
2224
import org.apache.lucene.analysis.standard.StandardAnalyzer;
2325
import org.elasticsearch.test.ESTestCase;
2426

2527
import java.io.IOException;
2628
import java.util.Collections;
2729
import java.util.HashMap;
2830
import java.util.Map;
31+
import java.util.concurrent.atomic.AtomicInteger;
2932

3033
public class IndexAnalyzersTests extends ESTestCase {
3134

@@ -77,4 +80,38 @@ public void testAnalyzerDefaults() throws IOException {
7780
}
7881
}
7982

83+
public void testClose() throws IOException {
84+
85+
AtomicInteger closes = new AtomicInteger(0);
86+
NamedAnalyzer a = new NamedAnalyzer("default", AnalyzerScope.INDEX, new WhitespaceAnalyzer()){
87+
@Override
88+
public void close() {
89+
super.close();
90+
closes.incrementAndGet();
91+
}
92+
};
93+
94+
NamedAnalyzer n = new NamedAnalyzer("keyword_normalizer", AnalyzerScope.INDEX, new KeywordAnalyzer()){
95+
@Override
96+
public void close() {
97+
super.close();
98+
closes.incrementAndGet();
99+
}
100+
};
101+
102+
NamedAnalyzer w = new NamedAnalyzer("whitespace_normalizer", AnalyzerScope.INDEX, new WhitespaceAnalyzer()){
103+
@Override
104+
public void close() {
105+
super.close();
106+
closes.incrementAndGet();
107+
}
108+
};
109+
110+
IndexAnalyzers ia = new IndexAnalyzers(Collections.singletonMap("default", a),
111+
Collections.singletonMap("n", n), Collections.singletonMap("w", w));
112+
ia.close();
113+
assertEquals(3, closes.get());
114+
115+
}
116+
80117
}

0 commit comments

Comments
 (0)