From 6e2e91cf2ab8b5502976a102cc01ad9576b62826 Mon Sep 17 00:00:00 2001 From: Boaz Leskes Date: Sun, 22 Nov 2015 18:42:18 +0100 Subject: [PATCH] Set an newly created IndexShard's ShardRouting before exposing it to operations The work for #10708 requires tighter integration with the current shard routing of a shard. As such, we need to make sure it is set before the IndexService exposes the shard to external operations. Closes #14918 --- .../org/elasticsearch/index/IndexService.java | 7 ++++--- .../cluster/IndicesClusterStateService.java | 3 +-- .../index/shard/IndexShardTests.java | 20 +++++++++---------- ...dicesLifecycleListenerSingleNodeTests.java | 2 +- 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/core/src/main/java/org/elasticsearch/index/IndexService.java b/core/src/main/java/org/elasticsearch/index/IndexService.java index 4687303e468..a5098f3f113 100644 --- a/core/src/main/java/org/elasticsearch/index/IndexService.java +++ b/core/src/main/java/org/elasticsearch/index/IndexService.java @@ -216,7 +216,7 @@ public final class IndexService extends AbstractIndexComponent implements IndexC } } - public synchronized IndexShard createShard(int sShardId, ShardRouting routing) throws IOException { + public synchronized IndexShard createShard(ShardRouting routing) throws IOException { final boolean primary = routing.primary(); /* * TODO: we execute this in parallel but it's a synced method. Yet, we might @@ -224,10 +224,10 @@ public final class IndexService extends AbstractIndexComponent implements IndexC * keep it synced. */ if (closed.get()) { - throw new IllegalStateException("Can't create shard [" + index().name() + "][" + sShardId + "], closed"); + throw new IllegalStateException("Can't create shard " + routing.shardId() + ", closed"); } final Settings indexSettings = this.indexSettings.getSettings(); - final ShardId shardId = new ShardId(index(), sShardId); + final ShardId shardId = routing.shardId(); boolean success = false; Store store = null; IndexShard indexShard = null; @@ -285,6 +285,7 @@ public final class IndexService extends AbstractIndexComponent implements IndexC eventListener.indexShardStateChanged(indexShard, null, indexShard.state(), "shard created"); eventListener.afterIndexShardCreated(indexShard); + indexShard.updateRoutingEntry(routing, true); shards = newMapBuilder(shards).put(shardId.id(), indexShard).immutableMap(); success = true; return indexShard; 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 d1532eb540f..cd60b87765a 100644 --- a/core/src/main/java/org/elasticsearch/indices/cluster/IndicesClusterStateService.java +++ b/core/src/main/java/org/elasticsearch/indices/cluster/IndicesClusterStateService.java @@ -625,8 +625,7 @@ public class IndicesClusterStateService extends AbstractLifecycleComponent