diff --git a/docs/changelog/123010.yaml b/docs/changelog/123010.yaml new file mode 100644 index 0000000000000..3d95d775b8a54 --- /dev/null +++ b/docs/changelog/123010.yaml @@ -0,0 +1,6 @@ +pr: 123010 +summary: Hold store reference in `InternalEngine#performActionWithDirectoryReader(...)` +area: Engine +type: bug +issues: + - 122974 diff --git a/muted-tests.yml b/muted-tests.yml index e8502b52a3464..9a8be7e0241fe 100644 --- a/muted-tests.yml +++ b/muted-tests.yml @@ -314,9 +314,6 @@ tests: issue: https://github.com/elastic/elasticsearch/issues/122913 - class: org.elasticsearch.xpack.search.AsyncSearchSecurityIT issue: https://github.com/elastic/elasticsearch/issues/122940 -- class: org.elasticsearch.action.admin.indices.create.ShrinkIndexIT - method: testShrinkIndexPrimaryTerm - issue: https://github.com/elastic/elasticsearch/issues/122974 - class: org.elasticsearch.test.apmintegration.TracesApmIT method: testApmIntegration issue: https://github.com/elastic/elasticsearch/issues/122129 diff --git a/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java b/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java index 94e8989bc5a1c..fc7f6eab0856c 100644 --- a/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java +++ b/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java @@ -3470,7 +3470,9 @@ protected long getPreCommitSegmentGeneration() { T performActionWithDirectoryReader(SearcherScope scope, CheckedFunction action) throws EngineException { assert scope == SearcherScope.INTERNAL : "performActionWithDirectoryReader(...) isn't prepared for external usage"; - assert store.hasReferences(); + if (store.tryIncRef() == false) { + throw new AlreadyClosedException(shardId + " store is closed", failedEngine.get()); + } try { ReferenceManager referenceManager = getReferenceManager(scope); ElasticsearchDirectoryReader acquire = referenceManager.acquire(); @@ -3486,6 +3488,8 @@ T performActionWithDirectoryReader(SearcherScope scope, CheckedFunction