diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/service/InternalIndexService.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/service/InternalIndexService.java index b136f712bcd..8c282a771dd 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/service/InternalIndexService.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/service/InternalIndexService.java @@ -20,6 +20,7 @@ package org.elasticsearch.index.service; import org.elasticsearch.ElasticSearchException; +import org.elasticsearch.ElasticSearchIllegalStateException; import org.elasticsearch.ElasticSearchInterruptedException; import org.elasticsearch.common.Nullable; import org.elasticsearch.common.collect.ImmutableMap; @@ -114,6 +115,8 @@ public class InternalIndexService extends AbstractIndexComponent implements Inde private volatile ImmutableMap shards = ImmutableMap.of(); + private volatile boolean closed = false; + private final CleanCacheOnIndicesLifecycleListener cleanCacheOnIndicesLifecycleListener = new CleanCacheOnIndicesLifecycleListener(); @Inject public InternalIndexService(Injector injector, Index index, @IndexSettings Settings indexSettings, NodeEnvironment nodeEnv, ThreadPool threadPool, @@ -209,6 +212,9 @@ public class InternalIndexService extends AbstractIndexComponent implements Inde } public void close(final boolean delete, final String reason) { + synchronized (this) { + closed = true; + } try { Set shardIds = shardIds(); final CountDownLatch latch = new CountDownLatch(shardIds.size()); @@ -248,6 +254,9 @@ public class InternalIndexService extends AbstractIndexComponent implements Inde } @Override public synchronized IndexShard createShard(int sShardId) throws ElasticSearchException { + if (closed) { + throw new ElasticSearchIllegalStateException("Can't create shard [" + index.name() + "][" + sShardId + "], closed"); + } ShardId shardId = new ShardId(index, sShardId); if (shardsInjectors.containsKey(shardId.id())) { throw new IndexShardAlreadyExistsException(shardId + " already exists"); diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InternalIndicesService.java b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InternalIndicesService.java index 159a6c8e936..254afc5d50f 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InternalIndicesService.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InternalIndicesService.java @@ -23,6 +23,7 @@ import org.apache.lucene.index.IndexReader; import org.apache.lucene.search.FieldCache; import org.apache.lucene.search.IndexReaderPurgedListener; import org.elasticsearch.ElasticSearchException; +import org.elasticsearch.ElasticSearchIllegalStateException; import org.elasticsearch.common.collect.ImmutableMap; import org.elasticsearch.common.collect.ImmutableSet; import org.elasticsearch.common.collect.UnmodifiableIterator; @@ -209,6 +210,9 @@ public class InternalIndicesService extends AbstractLifecycleComponent