[复合引擎] DataFormatAwareEngine.close() 在索引删除时与正在进行的合并造成死锁 → 导致集群应用程序崩溃
作者: linuxpi创建于 2026年9月18日更新于 2026年9月18日
标签duplicateuntriaged
(从线程转储中查找根本原因) 关闭删除的索引的分片时,cluster-applier 线程被阻塞,等待引擎的关闭锁:
"opensearch[...][clusterApplierService#updateTask][T#1]"
java.util.concurrent.CountDownLatch.await(CountDownLatch.java:230)
org.opensearch.index.engine.DataFormatAwareEngine.awaitPendingClose(DataFormatAwareEngine.java:2339)
org.opensearch.index.engine.DataFormatAwareEngine.close(DataFormatAwareEngine.java:2103)
org.opensearch.common.util.io.IOUtils.close(IOUtils.java:81)
org.opensearch.index.shard.IndexShard.close(IndexShard.java:2795)
org.opensearch.index.IndexService.closeShard(IndexService.java:1038)
org.opensearch.index.IndexService.removeShard(IndexService.java:1014)
org.opensearch.index.IndexService.close(IndexService.java:610)
org.opensearch.indices.IndicesService.removeIndex(IndicesService.java:1520)
org.opensearch.indices.cluster.IndicesClusterStateService.deleteIndices(IndicesClusterStateService.java:374)
org.opensearch.indices.cluster.IndicesClusterStateService.applyClusterState(IndicesClusterStateService.java:304)
org.opensearch.cluster.service.ClusterApplierService.callClusterStateAppliers(ClusterApplierService.java:660)
org.opensearch.cluster.service.ClusterApplierService.applyChanges(ClusterApplierService.java:595)
org.opensearch.cluster.service.ClusterApplierService.runTask(ClusterApplierService.java:516)
org.opensearch.cluster.service.ClusterApplierService$UpdateTask.run(ClusterApplierService.java:212)等待的合并线程也被阻塞,正在获取 DataFormatAwareEngine 锁,因此它们永远不会完成:
"opensearch[...][merge][T#4]"
java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:323)
org.opensearch.index.engine.DataFormatAwareEngine.lambda$new$0(DataFormatAwareEngine.java:327)
…内容来源: opensearch-project/OpenSearch