diff --git a/core/src/main/java/org/elasticsearch/indices/cluster/IndicesClusterStateService.java b/core/src/main/java/org/elasticsearch/indices/cluster/IndicesClusterStateService.java index 920de8ae467..96f0a98b991 100644 --- a/core/src/main/java/org/elasticsearch/indices/cluster/IndicesClusterStateService.java +++ b/core/src/main/java/org/elasticsearch/indices/cluster/IndicesClusterStateService.java @@ -148,12 +148,17 @@ public class IndicesClusterStateService extends AbstractLifecycleComponent imple @Override protected void doStart() { - clusterService.addFirst(this); + // Doesn't make sense to manage shards on non-master and non-data nodes + if (DiscoveryNode.isDataNode(settings) || DiscoveryNode.isMasterNode(settings)) { + clusterService.addFirst(this); + } } @Override protected void doStop() { - clusterService.remove(this); + if (DiscoveryNode.isDataNode(settings) || DiscoveryNode.isMasterNode(settings)) { + clusterService.remove(this); + } } @Override diff --git a/core/src/main/java/org/elasticsearch/indices/store/IndicesStore.java b/core/src/main/java/org/elasticsearch/indices/store/IndicesStore.java index 439806b454b..372951bdfd5 100644 --- a/core/src/main/java/org/elasticsearch/indices/store/IndicesStore.java +++ b/core/src/main/java/org/elasticsearch/indices/store/IndicesStore.java @@ -94,12 +94,17 @@ public class IndicesStore extends AbstractComponent implements ClusterStateListe this.threadPool = threadPool; transportService.registerRequestHandler(ACTION_SHARD_EXISTS, ShardActiveRequest::new, ThreadPool.Names.SAME, new ShardActiveRequestHandler()); this.deleteShardTimeout = INDICES_STORE_DELETE_SHARD_TIMEOUT.get(settings); - clusterService.addLast(this); + // Doesn't make sense to delete shards on non-data nodes + if (DiscoveryNode.isDataNode(settings)) { + clusterService.add(this); + } } @Override public void close() { - clusterService.remove(this); + if (DiscoveryNode.isDataNode(settings)) { + clusterService.remove(this); + } } @Override