Skip to content

Commit 46d1d19

Browse files
committed
Search: Search requests execute by mistake on the networking http IO thread, causing other http operations to hang, closes elastic#1455.
1 parent bf8911e commit 46d1d19

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

modules/elasticsearch/src/main/java/org/elasticsearch/cluster/routing/PlainShardsIterator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public PlainShardsIterator(List<ShardRouting> shards, int index) {
6565
if (size == 0) {
6666
return null;
6767
}
68-
return shards.get((index + 1) % size);
68+
return shards.get(index);
6969
}
7070

7171
@Override public ShardRouting nextOrNull() {

modules/elasticsearch/src/test/java/org/elasticsearch/cluster/structure/RoutingIteratorTests.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,13 @@ public class RoutingIteratorTests {
8585

8686
ShardIterator shardIterator = routingTable.index("test1").shard(0).shardsIt(0);
8787
assertThat(shardIterator.size(), equalTo(3));
88+
ShardRouting firstRouting = shardIterator.firstOrNull();
8889
assertThat(shardIterator.firstOrNull(), notNullValue());
8990
assertThat(shardIterator.remaining(), equalTo(3));
9091
assertThat(shardIterator.firstOrNull(), sameInstance(shardIterator.firstOrNull()));
9192
assertThat(shardIterator.remaining(), equalTo(3));
9293
ShardRouting shardRouting1 = shardIterator.nextOrNull();
94+
assertThat(firstRouting, sameInstance(shardRouting1));
9395
assertThat(shardRouting1, notNullValue());
9496
assertThat(shardIterator.remaining(), equalTo(2));
9597
ShardRouting shardRouting2 = shardIterator.nextOrNull();
@@ -119,11 +121,13 @@ public class RoutingIteratorTests {
119121

120122
ShardIterator shardIterator = routingTable.index("test1").shard(0).shardsIt(0);
121123
assertThat(shardIterator.size(), equalTo(2));
124+
ShardRouting firstRouting = shardIterator.firstOrNull();
122125
assertThat(shardIterator.firstOrNull(), notNullValue());
123126
assertThat(shardIterator.remaining(), equalTo(2));
124127
assertThat(shardIterator.firstOrNull(), sameInstance(shardIterator.firstOrNull()));
125128
assertThat(shardIterator.remaining(), equalTo(2));
126129
ShardRouting shardRouting1 = shardIterator.nextOrNull();
130+
assertThat(shardRouting1, sameInstance(firstRouting));
127131
assertThat(shardRouting1, notNullValue());
128132
assertThat(shardIterator.remaining(), equalTo(1));
129133
ShardRouting shardRouting2 = shardIterator.nextOrNull();
@@ -137,9 +141,11 @@ public class RoutingIteratorTests {
137141

138142
shardIterator = routingTable.index("test1").shard(0).shardsIt(1);
139143
assertThat(shardIterator.size(), equalTo(2));
144+
firstRouting = shardIterator.firstOrNull();
140145
assertThat(shardIterator.firstOrNull(), notNullValue());
141146
assertThat(shardIterator.firstOrNull(), sameInstance(shardIterator.firstOrNull()));
142147
ShardRouting shardRouting3 = shardIterator.nextOrNull();
148+
assertThat(firstRouting, sameInstance(shardRouting3));
143149
assertThat(shardRouting1, notNullValue());
144150
ShardRouting shardRouting4 = shardIterator.nextOrNull();
145151
assertThat(shardRouting2, notNullValue());
@@ -154,9 +160,11 @@ public class RoutingIteratorTests {
154160

155161
shardIterator = routingTable.index("test1").shard(0).shardsIt(2);
156162
assertThat(shardIterator.size(), equalTo(2));
163+
firstRouting = shardIterator.firstOrNull();
157164
assertThat(shardIterator.firstOrNull(), notNullValue());
158165
assertThat(shardIterator.firstOrNull(), sameInstance(shardIterator.firstOrNull()));
159166
ShardRouting shardRouting5 = shardIterator.nextOrNull();
167+
assertThat(shardRouting5, sameInstance(firstRouting));
160168
assertThat(shardRouting5, notNullValue());
161169
ShardRouting shardRouting6 = shardIterator.nextOrNull();
162170
assertThat(shardRouting6, notNullValue());
@@ -169,9 +177,11 @@ public class RoutingIteratorTests {
169177

170178
shardIterator = routingTable.index("test1").shard(0).shardsIt(3);
171179
assertThat(shardIterator.size(), equalTo(2));
180+
firstRouting = shardIterator.firstOrNull();
172181
assertThat(shardIterator.firstOrNull(), notNullValue());
173182
assertThat(shardIterator.firstOrNull(), sameInstance(shardIterator.firstOrNull()));
174183
ShardRouting shardRouting7 = shardIterator.nextOrNull();
184+
assertThat(shardRouting7, sameInstance(firstRouting));
175185
assertThat(shardRouting7, notNullValue());
176186
ShardRouting shardRouting8 = shardIterator.nextOrNull();
177187
assertThat(shardRouting8, notNullValue());
@@ -181,6 +191,23 @@ public class RoutingIteratorTests {
181191

182192
assertThat(shardRouting7, sameInstance(shardRouting3));
183193
assertThat(shardRouting8, sameInstance(shardRouting4));
194+
195+
shardIterator = routingTable.index("test1").shard(0).shardsIt(4);
196+
assertThat(shardIterator.size(), equalTo(2));
197+
firstRouting = shardIterator.firstOrNull();
198+
assertThat(shardIterator.firstOrNull(), notNullValue());
199+
assertThat(shardIterator.firstOrNull(), sameInstance(shardIterator.firstOrNull()));
200+
ShardRouting shardRouting9 = shardIterator.nextOrNull();
201+
assertThat(shardRouting9, sameInstance(firstRouting));
202+
assertThat(shardRouting9, notNullValue());
203+
ShardRouting shardRouting10 = shardIterator.nextOrNull();
204+
assertThat(shardRouting10, notNullValue());
205+
assertThat(shardRouting10, not(sameInstance(shardRouting9)));
206+
assertThat(shardIterator.nextOrNull(), nullValue());
207+
assertThat(shardIterator.nextOrNull(), nullValue());
208+
209+
assertThat(shardRouting9, sameInstance(shardRouting5));
210+
assertThat(shardRouting10, sameInstance(shardRouting6));
184211
}
185212

186213
@Test public void testRandomRouting() {

0 commit comments

Comments
 (0)