diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/percolator/PercolatorExecutor.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/percolator/PercolatorExecutor.java index 7b65320a5e2..93695d81c8c 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/percolator/PercolatorExecutor.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/percolator/PercolatorExecutor.java @@ -55,9 +55,8 @@ import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.xcontent.QueryBuilders; import org.elasticsearch.index.service.IndexService; import org.elasticsearch.index.settings.IndexSettings; -import org.elasticsearch.index.shard.ShardId; import org.elasticsearch.index.shard.service.IndexShard; -import org.elasticsearch.indices.IndicesLifecycle; +import org.elasticsearch.indices.IndicesService; import java.io.IOException; import java.io.Reader; @@ -170,13 +169,7 @@ public class PercolatorExecutor extends AbstractIndexComponent { private volatile ImmutableMap queries = ImmutableMap.of(); - private final PercolatorIndexAndShardListener percolatorIndexAndShardListener = new PercolatorIndexAndShardListener(); - - private volatile IndicesLifecycle indicesLifecycle; - - private volatile IndexService percolatorIndex; - - private volatile IndexShard percolatorShard; + private IndicesService indicesService; @Inject public PercolatorExecutor(Index index, @IndexSettings Settings indexSettings, MapperService mapperService, IndexQueryParserService queryParserService, @@ -187,17 +180,11 @@ public class PercolatorExecutor extends AbstractIndexComponent { this.indexCache = indexCache; } - public void setIndicesLifecycle(IndicesLifecycle indicesLifecycle) { - this.indicesLifecycle = indicesLifecycle; - if (indicesLifecycle != null) { - indicesLifecycle.addListener(percolatorIndexAndShardListener); - } + public void setIndicesService(IndicesService indicesService) { + this.indicesService = indicesService; } public synchronized void close() { - if (indicesLifecycle != null) { - indicesLifecycle.removeListener(percolatorIndexAndShardListener); - } ImmutableMap old = queries; queries = ImmutableMap.of(); old.clear(); @@ -362,9 +349,14 @@ public class PercolatorExecutor extends AbstractIndexComponent { } } } else { - if (percolatorIndex == null || percolatorShard == null) { + IndexService percolatorIndex = indicesService.indexService(PercolatorService.INDEX_NAME); + if (percolatorIndex == null) { throw new PercolateIndexUnavailable(new Index(PercolatorService.INDEX_NAME)); } + if (percolatorIndex.numberOfShards() == 0) { + throw new PercolateIndexUnavailable(new Index(PercolatorService.INDEX_NAME)); + } + IndexShard percolatorShard = percolatorIndex.shard(0); Engine.Searcher percolatorSearcher = percolatorShard.searcher(); try { percolatorSearcher.searcher().search(request.query(), new QueryCollector(logger, queries, searcher, percolatorIndex, matches)); @@ -380,32 +372,6 @@ public class PercolatorExecutor extends AbstractIndexComponent { return new Response(matches, request.doc().mappersAdded()); } - class PercolatorIndexAndShardListener extends IndicesLifecycle.Listener { - @Override public void afterIndexCreated(IndexService indexService) { - if (indexService.index().name().equals(PercolatorService.INDEX_NAME)) { - percolatorIndex = indexService; - } - } - - @Override public void afterIndexClosed(Index index, boolean delete) { - if (index.name().equals(PercolatorService.INDEX_NAME)) { - percolatorIndex = null; - } - } - - @Override public void afterIndexShardCreated(IndexShard indexShard) { - if (indexShard.shardId().index().name().equals(PercolatorService.INDEX_NAME)) { - percolatorShard = indexShard; - } - } - - @Override public void afterIndexShardClosed(ShardId shardId, boolean delete) { - if (shardId.index().name().equals(PercolatorService.INDEX_NAME)) { - percolatorShard = null; - } - } - } - static class QueryCollector extends Collector { private final IndexSearcher searcher; private final IndexService percolatorIndex; diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/percolator/PercolatorService.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/percolator/PercolatorService.java index 80e74ff4c87..c3484f24649 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/percolator/PercolatorService.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/percolator/PercolatorService.java @@ -71,7 +71,7 @@ public class PercolatorService extends AbstractIndexComponent { this.percolator = percolator; this.shardLifecycleListener = new ShardLifecycleListener(); this.indicesService.indicesLifecycle().addListener(shardLifecycleListener); - this.percolator.setIndicesLifecycle(indicesService.indicesLifecycle()); + this.percolator.setIndicesService(indicesService); } public void close() { diff --git a/modules/test/integration/src/test/java/org/elasticsearch/test/integration/percolator/SimplePercolatorTests.java b/modules/test/integration/src/test/java/org/elasticsearch/test/integration/percolator/SimplePercolatorTests.java index 54fb7ba81cf..cb41203aa0c 100644 --- a/modules/test/integration/src/test/java/org/elasticsearch/test/integration/percolator/SimplePercolatorTests.java +++ b/modules/test/integration/src/test/java/org/elasticsearch/test/integration/percolator/SimplePercolatorTests.java @@ -88,6 +88,13 @@ public class SimplePercolatorTests extends AbstractNodesTests { .endObject().endObject()) .execute().actionGet(); assertThat(percolate.matches().size(), equalTo(1)); + + percolate = client.preparePercolate("test", "type1").setSource(jsonBuilder().startObject() + .startObject("doc").field("field1", "value1").endObject() + .field("query", matchAllQuery()) + .endObject()) + .execute().actionGet(); + assertThat(percolate.matches().size(), equalTo(1)); } @Test public void createIndexAndThenRegisterPercolator() throws Exception {