|
@@ -759,13 +759,11 @@ public class InternalEngine extends Engine {
|
|
|
|
|
|
private ExternalReaderManager createReaderManager(RefreshWarmerListener externalRefreshListener) throws EngineException {
|
|
|
boolean success = false;
|
|
|
+ ElasticsearchDirectoryReader directoryReader = null;
|
|
|
ElasticsearchReaderManager internalReaderManager = null;
|
|
|
try {
|
|
|
try {
|
|
|
- final ElasticsearchDirectoryReader directoryReader = ElasticsearchDirectoryReader.wrap(
|
|
|
- DirectoryReader.open(indexWriter),
|
|
|
- shardId
|
|
|
- );
|
|
|
+ directoryReader = ElasticsearchDirectoryReader.wrap(DirectoryReader.open(indexWriter), shardId);
|
|
|
lastCommittedSegmentInfos = store.readLastCommittedSegmentsInfo();
|
|
|
internalReaderManager = createInternalReaderManager(directoryReader);
|
|
|
ExternalReaderManager externalReaderManager = new ExternalReaderManager(internalReaderManager, externalRefreshListener);
|
|
@@ -782,7 +780,9 @@ public class InternalEngine extends Engine {
|
|
|
}
|
|
|
} finally {
|
|
|
if (success == false) { // release everything we created on a failure
|
|
|
- IOUtils.closeWhileHandlingException(internalReaderManager, indexWriter);
|
|
|
+ // make sure that we close the directory reader even if the internal reader manager has failed to initialize
|
|
|
+ var reader = internalReaderManager == null ? directoryReader : internalReaderManager;
|
|
|
+ IOUtils.closeWhileHandlingException(reader, indexWriter);
|
|
|
}
|
|
|
}
|
|
|
}
|