Skip to content

Commit c137ad0

Browse files
author
Christoph Büscher
authored
Replace several try-finally statements (#30880)
This change replaces some existing try-finally statements that close resources in their finally block with the slightly shorter and safer try-with-resources pattern.
1 parent 89869a2 commit c137ad0

File tree

9 files changed

+71
-87
lines changed

9 files changed

+71
-87
lines changed

server/src/main/java/org/elasticsearch/common/geo/parsers/GeoWKTParser.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,9 @@
1818
*/
1919
package org.elasticsearch.common.geo.parsers;
2020

21-
import org.locationtech.jts.geom.Coordinate;
2221
import org.elasticsearch.ElasticsearchParseException;
2322
import org.elasticsearch.common.geo.GeoPoint;
2423
import org.elasticsearch.common.geo.GeoShapeType;
25-
26-
import java.io.StringReader;
2724
import org.elasticsearch.common.geo.builders.CoordinatesBuilder;
2825
import org.elasticsearch.common.geo.builders.EnvelopeBuilder;
2926
import org.elasticsearch.common.geo.builders.GeometryCollectionBuilder;
@@ -37,9 +34,11 @@
3734
import org.elasticsearch.common.logging.Loggers;
3835
import org.elasticsearch.common.xcontent.XContentParser;
3936
import org.elasticsearch.index.mapper.GeoShapeFieldMapper;
37+
import org.locationtech.jts.geom.Coordinate;
4038

4139
import java.io.IOException;
4240
import java.io.StreamTokenizer;
41+
import java.io.StringReader;
4342
import java.util.List;
4443

4544
/**
@@ -77,8 +76,7 @@ public static ShapeBuilder parseExpectedType(XContentParser parser, final GeoSha
7776
public static ShapeBuilder parseExpectedType(XContentParser parser, final GeoShapeType shapeType,
7877
final GeoShapeFieldMapper shapeMapper)
7978
throws IOException, ElasticsearchParseException {
80-
StringReader reader = new StringReader(parser.text());
81-
try {
79+
try (StringReader reader = new StringReader(parser.text())) {
8280
boolean ignoreZValue = (shapeMapper != null && shapeMapper.ignoreZValue().value() == true);
8381
// setup the tokenizer; configured to read words w/o numbers
8482
StreamTokenizer tokenizer = new StreamTokenizer(reader);
@@ -95,8 +93,6 @@ public static ShapeBuilder parseExpectedType(XContentParser parser, final GeoSha
9593
ShapeBuilder builder = parseGeometry(tokenizer, shapeType, ignoreZValue);
9694
checkEOF(tokenizer);
9795
return builder;
98-
} finally {
99-
reader.close();
10096
}
10197
}
10298

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

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -234,8 +234,8 @@ public static List<String> getWordList(Environment env, Settings settings, Strin
234234

235235
final Path path = env.configFile().resolve(wordListPath);
236236

237-
try (BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) {
238-
return loadWordList(reader, "#");
237+
try {
238+
return loadWordList(path, "#");
239239
} catch (CharacterCodingException ex) {
240240
String message = String.format(Locale.ROOT,
241241
"Unsupported character encoding detected while reading %s_path: %s - files must be UTF-8 encoded",
@@ -247,15 +247,9 @@ public static List<String> getWordList(Environment env, Settings settings, Strin
247247
}
248248
}
249249

250-
public static List<String> loadWordList(Reader reader, String comment) throws IOException {
250+
private static List<String> loadWordList(Path path, String comment) throws IOException {
251251
final List<String> result = new ArrayList<>();
252-
BufferedReader br = null;
253-
try {
254-
if (reader instanceof BufferedReader) {
255-
br = (BufferedReader) reader;
256-
} else {
257-
br = new BufferedReader(reader);
258-
}
252+
try (BufferedReader br = Files.newBufferedReader(path, StandardCharsets.UTF_8)) {
259253
String word;
260254
while ((word = br.readLine()) != null) {
261255
if (!Strings.hasText(word)) {
@@ -265,9 +259,6 @@ public static List<String> loadWordList(Reader reader, String comment) throws IO
265259
result.add(word.trim());
266260
}
267261
}
268-
} finally {
269-
if (br != null)
270-
br.close();
271262
}
272263
return result;
273264
}

server/src/main/java/org/elasticsearch/index/engine/Engine.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1424,10 +1424,6 @@ public DocIdAndVersion docIdAndVersion() {
14241424

14251425
@Override
14261426
public void close() {
1427-
release();
1428-
}
1429-
1430-
public void release() {
14311427
Releasables.close(searcher);
14321428
}
14331429
}

server/src/main/java/org/elasticsearch/index/get/ShardGetService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ private GetResult innerGet(String type, String id, String[] gFields, boolean rea
159159
get = indexShard.get(new Engine.Get(realtime, readFromTranslog, type, id, uidTerm)
160160
.version(version).versionType(versionType));
161161
if (get.exists() == false) {
162-
get.release();
162+
get.close();
163163
}
164164
}
165165
}
@@ -172,7 +172,7 @@ private GetResult innerGet(String type, String id, String[] gFields, boolean rea
172172
// break between having loaded it from translog (so we only have _source), and having a document to load
173173
return innerGetLoadFromStoredFields(type, id, gFields, fetchSourceContext, get, mapperService);
174174
} finally {
175-
get.release();
175+
get.close();
176176
}
177177
}
178178

server/src/main/java/org/elasticsearch/index/termvectors/TermVectorsService.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,6 @@ static TermVectorsResponse getTermVectors(IndexShard indexShard, TermVectorsRequ
8585
termVectorsResponse.setExists(false);
8686
return termVectorsResponse;
8787
}
88-
Engine.GetResult get = indexShard.get(new Engine.Get(request.realtime(), false, request.type(), request.id(), uidTerm)
89-
.version(request.version()).versionType(request.versionType()));
9088

9189
Fields termVectorsByField = null;
9290
AggregatedDfs dfs = null;
@@ -97,8 +95,9 @@ static TermVectorsResponse getTermVectors(IndexShard indexShard, TermVectorsRequ
9795
handleFieldWildcards(indexShard, request);
9896
}
9997

100-
final Engine.Searcher searcher = indexShard.acquireSearcher("term_vector");
101-
try {
98+
try (Engine.GetResult get = indexShard.get(new Engine.Get(request.realtime(), false, request.type(), request.id(), uidTerm)
99+
.version(request.version()).versionType(request.versionType()));
100+
Engine.Searcher searcher = indexShard.acquireSearcher("term_vector")) {
102101
Fields topLevelFields = MultiFields.getFields(get.searcher() != null ? get.searcher().reader() : searcher.reader());
103102
DocIdAndVersion docIdAndVersion = get.docIdAndVersion();
104103
/* from an artificial document */
@@ -143,14 +142,12 @@ else if (docIdAndVersion != null) {
143142
}
144143
}
145144
// write term vectors
146-
termVectorsResponse.setFields(termVectorsByField, request.selectedFields(), request.getFlags(), topLevelFields, dfs, termVectorsFilter);
145+
termVectorsResponse.setFields(termVectorsByField, request.selectedFields(), request.getFlags(), topLevelFields, dfs,
146+
termVectorsFilter);
147147
}
148148
termVectorsResponse.setTookInMillis(TimeUnit.NANOSECONDS.toMillis(nanoTimeSupplier.getAsLong() - startTime));
149149
} catch (Exception ex) {
150150
throw new ElasticsearchException("failed to execute term vector request", ex);
151-
} finally {
152-
searcher.close();
153-
get.release();
154151
}
155152
return termVectorsResponse;
156153
}

server/src/main/java/org/elasticsearch/search/SearchService.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
import org.apache.lucene.search.FieldDoc;
2323
import org.apache.lucene.search.TopDocs;
24-
import org.elasticsearch.core.internal.io.IOUtils;
2524
import org.elasticsearch.ElasticsearchException;
2625
import org.elasticsearch.ExceptionsHelper;
2726
import org.elasticsearch.action.ActionListener;
@@ -39,6 +38,7 @@
3938
import org.elasticsearch.common.util.concurrent.AbstractRunnable;
4039
import org.elasticsearch.common.util.concurrent.ConcurrentCollections;
4140
import org.elasticsearch.common.util.concurrent.ConcurrentMapLong;
41+
import org.elasticsearch.core.internal.io.IOUtils;
4242
import org.elasticsearch.index.Index;
4343
import org.elasticsearch.index.IndexService;
4444
import org.elasticsearch.index.IndexSettings;
@@ -92,8 +92,8 @@
9292
import org.elasticsearch.search.sort.SortBuilder;
9393
import org.elasticsearch.search.suggest.Suggest;
9494
import org.elasticsearch.search.suggest.completion.CompletionSuggestion;
95-
import org.elasticsearch.threadpool.ThreadPool;
9695
import org.elasticsearch.threadpool.Scheduler.Cancellable;
96+
import org.elasticsearch.threadpool.ThreadPool;
9797
import org.elasticsearch.threadpool.ThreadPool.Names;
9898
import org.elasticsearch.transport.TransportRequest;
9999

@@ -646,20 +646,17 @@ private void freeAllContextForIndex(Index index) {
646646

647647

648648
public boolean freeContext(long id) {
649-
final SearchContext context = removeContext(id);
650-
if (context != null) {
651-
assert context.refCount() > 0 : " refCount must be > 0: " + context.refCount();
652-
try {
649+
try (SearchContext context = removeContext(id)) {
650+
if (context != null) {
651+
assert context.refCount() > 0 : " refCount must be > 0: " + context.refCount();
653652
context.indexShard().getSearchOperationListener().onFreeContext(context);
654653
if (context.scrollContext() != null) {
655654
context.indexShard().getSearchOperationListener().onFreeScrollContext(context);
656655
}
657-
} finally {
658-
context.close();
656+
return true;
659657
}
660-
return true;
658+
return false;
661659
}
662-
return false;
663660
}
664661

665662
public void freeAllScrollContexts() {

server/src/test/java/org/elasticsearch/action/termvectors/MultiTermVectorsIT.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.apache.lucene.index.Fields;
2424
import org.apache.lucene.index.Terms;
2525
import org.apache.lucene.index.TermsEnum;
26+
import org.elasticsearch.ElasticsearchException;
2627
import org.elasticsearch.action.admin.indices.alias.Alias;
2728
import org.elasticsearch.common.lucene.uid.Versions;
2829
import org.elasticsearch.common.settings.Settings;
@@ -111,7 +112,8 @@ public void testMultiTermVectorsWithVersion() throws Exception {
111112
checkTermTexts(response.getResponses()[1].getResponse().getFields().terms("field"), new String[]{"value1"});
112113
assertThat(response.getResponses()[2].getFailure(), notNullValue());
113114
assertThat(response.getResponses()[2].getFailure().getId(), equalTo("1"));
114-
assertThat(response.getResponses()[2].getFailure().getCause(), instanceOf(VersionConflictEngineException.class));
115+
assertThat(response.getResponses()[2].getFailure().getCause(), instanceOf(ElasticsearchException.class));
116+
assertThat(response.getResponses()[2].getFailure().getCause().getCause(), instanceOf(VersionConflictEngineException.class));
115117

116118
//Version from Lucene index
117119
refresh();
@@ -132,7 +134,8 @@ public void testMultiTermVectorsWithVersion() throws Exception {
132134
checkTermTexts(response.getResponses()[1].getResponse().getFields().terms("field"), new String[]{"value1"});
133135
assertThat(response.getResponses()[2].getFailure(), notNullValue());
134136
assertThat(response.getResponses()[2].getFailure().getId(), equalTo("1"));
135-
assertThat(response.getResponses()[2].getFailure().getCause(), instanceOf(VersionConflictEngineException.class));
137+
assertThat(response.getResponses()[2].getFailure().getCause(), instanceOf(ElasticsearchException.class));
138+
assertThat(response.getResponses()[2].getFailure().getCause().getCause(), instanceOf(VersionConflictEngineException.class));
136139

137140

138141
for (int i = 0; i < 3; i++) {
@@ -155,7 +158,8 @@ public void testMultiTermVectorsWithVersion() throws Exception {
155158
assertThat(response.getResponses()[1].getFailure(), notNullValue());
156159
assertThat(response.getResponses()[1].getFailure().getId(), equalTo("2"));
157160
assertThat(response.getResponses()[1].getIndex(), equalTo("test"));
158-
assertThat(response.getResponses()[1].getFailure().getCause(), instanceOf(VersionConflictEngineException.class));
161+
assertThat(response.getResponses()[1].getFailure().getCause(), instanceOf(ElasticsearchException.class));
162+
assertThat(response.getResponses()[1].getFailure().getCause().getCause(), instanceOf(VersionConflictEngineException.class));
159163
assertThat(response.getResponses()[2].getId(), equalTo("2"));
160164
assertThat(response.getResponses()[2].getIndex(), equalTo("test"));
161165
assertThat(response.getResponses()[2].getFailure(), nullValue());
@@ -180,7 +184,8 @@ public void testMultiTermVectorsWithVersion() throws Exception {
180184
assertThat(response.getResponses()[1].getFailure(), notNullValue());
181185
assertThat(response.getResponses()[1].getFailure().getId(), equalTo("2"));
182186
assertThat(response.getResponses()[1].getIndex(), equalTo("test"));
183-
assertThat(response.getResponses()[1].getFailure().getCause(), instanceOf(VersionConflictEngineException.class));
187+
assertThat(response.getResponses()[1].getFailure().getCause(), instanceOf(ElasticsearchException.class));
188+
assertThat(response.getResponses()[1].getFailure().getCause().getCause(), instanceOf(VersionConflictEngineException.class));
184189
assertThat(response.getResponses()[2].getId(), equalTo("2"));
185190
assertThat(response.getResponses()[2].getIndex(), equalTo("test"));
186191
assertThat(response.getResponses()[2].getFailure(), nullValue());

server/src/test/java/org/elasticsearch/index/engine/InternalEngineTests.java

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import com.carrotsearch.hppc.cursors.ObjectObjectCursor;
2323
import com.carrotsearch.randomizedtesting.generators.RandomNumbers;
24+
2425
import org.apache.logging.log4j.Level;
2526
import org.apache.logging.log4j.LogManager;
2627
import org.apache.logging.log4j.Logger;
@@ -793,7 +794,7 @@ public void testConcurrentGetAndFlush() throws Exception {
793794
while (flushFinished.get() == false) {
794795
Engine.GetResult previousGetResult = latestGetResult.get();
795796
if (previousGetResult != null) {
796-
previousGetResult.release();
797+
previousGetResult.close();
797798
}
798799
latestGetResult.set(engine.get(newGet(true, doc), searcherFactory));
799800
if (latestGetResult.get().exists() == false) {
@@ -807,7 +808,7 @@ public void testConcurrentGetAndFlush() throws Exception {
807808
flushFinished.set(true);
808809
getThread.join();
809810
assertTrue(latestGetResult.get().exists());
810-
latestGetResult.get().release();
811+
latestGetResult.get().close();
811812
}
812813

813814
public void testSimpleOperations() throws Exception {
@@ -830,21 +831,20 @@ public void testSimpleOperations() throws Exception {
830831
searchResult.close();
831832

832833
// but, not there non realtime
833-
Engine.GetResult getResult = engine.get(newGet(false, doc), searcherFactory);
834-
assertThat(getResult.exists(), equalTo(false));
835-
getResult.release();
834+
try (Engine.GetResult getResult = engine.get(newGet(false, doc), searcherFactory)) {
835+
assertThat(getResult.exists(), equalTo(false));
836+
}
836837

837838
// but, we can still get it (in realtime)
838-
getResult = engine.get(newGet(true, doc), searcherFactory);
839-
assertThat(getResult.exists(), equalTo(true));
840-
assertThat(getResult.docIdAndVersion(), notNullValue());
841-
getResult.release();
839+
try (Engine.GetResult getResult = engine.get(newGet(true, doc), searcherFactory)) {
840+
assertThat(getResult.exists(), equalTo(true));
841+
assertThat(getResult.docIdAndVersion(), notNullValue());
842+
}
842843

843844
// but not real time is not yet visible
844-
getResult = engine.get(newGet(false, doc), searcherFactory);
845-
assertThat(getResult.exists(), equalTo(false));
846-
getResult.release();
847-
845+
try (Engine.GetResult getResult = engine.get(newGet(false, doc), searcherFactory)) {
846+
assertThat(getResult.exists(), equalTo(false));
847+
}
848848

849849
// refresh and it should be there
850850
engine.refresh("test");
@@ -856,10 +856,10 @@ public void testSimpleOperations() throws Exception {
856856
searchResult.close();
857857

858858
// also in non realtime
859-
getResult = engine.get(newGet(false, doc), searcherFactory);
860-
assertThat(getResult.exists(), equalTo(true));
861-
assertThat(getResult.docIdAndVersion(), notNullValue());
862-
getResult.release();
859+
try (Engine.GetResult getResult = engine.get(newGet(false, doc), searcherFactory)) {
860+
assertThat(getResult.exists(), equalTo(true));
861+
assertThat(getResult.docIdAndVersion(), notNullValue());
862+
}
863863

864864
// now do an update
865865
document = testDocument();
@@ -876,10 +876,10 @@ public void testSimpleOperations() throws Exception {
876876
searchResult.close();
877877

878878
// but, we can still get it (in realtime)
879-
getResult = engine.get(newGet(true, doc), searcherFactory);
880-
assertThat(getResult.exists(), equalTo(true));
881-
assertThat(getResult.docIdAndVersion(), notNullValue());
882-
getResult.release();
879+
try (Engine.GetResult getResult = engine.get(newGet(true, doc), searcherFactory)) {
880+
assertThat(getResult.exists(), equalTo(true));
881+
assertThat(getResult.docIdAndVersion(), notNullValue());
882+
}
883883

884884
// refresh and it should be updated
885885
engine.refresh("test");
@@ -901,9 +901,9 @@ public void testSimpleOperations() throws Exception {
901901
searchResult.close();
902902

903903
// but, get should not see it (in realtime)
904-
getResult = engine.get(newGet(true, doc), searcherFactory);
905-
assertThat(getResult.exists(), equalTo(false));
906-
getResult.release();
904+
try (Engine.GetResult getResult = engine.get(newGet(true, doc), searcherFactory)) {
905+
assertThat(getResult.exists(), equalTo(false));
906+
}
907907

908908
// refresh and it should be deleted
909909
engine.refresh("test");
@@ -941,10 +941,10 @@ public void testSimpleOperations() throws Exception {
941941
engine.flush();
942942

943943
// and, verify get (in real time)
944-
getResult = engine.get(newGet(true, doc), searcherFactory);
945-
assertThat(getResult.exists(), equalTo(true));
946-
assertThat(getResult.docIdAndVersion(), notNullValue());
947-
getResult.release();
944+
try (Engine.GetResult getResult = engine.get(newGet(true, doc), searcherFactory)) {
945+
assertThat(getResult.exists(), equalTo(true));
946+
assertThat(getResult.docIdAndVersion(), notNullValue());
947+
}
948948

949949
// make sure we can still work with the engine
950950
// now do an update
@@ -4156,7 +4156,7 @@ public void testSeqNoGenerator() throws IOException {
41564156
new Term("_id", parsedDocument.id()),
41574157
parsedDocument,
41584158
SequenceNumbers.UNASSIGNED_SEQ_NO,
4159-
(long) randomIntBetween(1, 8),
4159+
randomIntBetween(1, 8),
41604160
Versions.MATCH_ANY,
41614161
VersionType.INTERNAL,
41624162
Engine.Operation.Origin.PRIMARY,
@@ -4172,7 +4172,7 @@ public void testSeqNoGenerator() throws IOException {
41724172
id,
41734173
new Term("_id", parsedDocument.id()),
41744174
SequenceNumbers.UNASSIGNED_SEQ_NO,
4175-
(long) randomIntBetween(1, 8),
4175+
randomIntBetween(1, 8),
41764176
Versions.MATCH_ANY,
41774177
VersionType.INTERNAL,
41784178
Engine.Operation.Origin.PRIMARY,

0 commit comments

Comments
 (0)