From 3dcf1d54454346127f15aa6412e57d9825be9cc7 Mon Sep 17 00:00:00 2001 From: Yannick Welsch Date: Tue, 4 Oct 2016 13:22:25 +0200 Subject: [PATCH] Skip shard management code when updating cluster state on client/tribe nodes (#20731) IndicesClusterStateService and IndicesStore are responsible for synchronizing local shard state based on incoming cluster state updates. On client/tribe nodes, which don't store any such shard/index data/metadata, all of the logic that computes which data is to be deleted, which shards to be initialized etc. can be completely skipped, saving precious CPU cycles. --- .../indices/cluster/IndicesClusterStateService.java | 9 +++++++-- .../org/elasticsearch/indices/store/IndicesStore.java | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) 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