Skip to content

Commit ce760ec

Browse files
authored
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 5c6ca8d commit ce760ec

File tree

2 files changed

+41
-3
lines changed

2 files changed

+41
-3
lines changed

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

+5-3
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

+36
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,37 @@ 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(Map.of("default", a), Map.of("n", n), Map.of("w", w));
111+
ia.close();
112+
assertEquals(3, closes.get());
113+
114+
}
115+
80116
}

0 commit comments

Comments
 (0)