From 21c4530aaf5cd14c6880185b14d2b155286ff9b8 Mon Sep 17 00:00:00 2001 From: Shay Banon Date: Fri, 11 Nov 2011 22:20:57 +0200 Subject: [PATCH] Search: Search requests execute by mistake on the networking http IO thread, causing other http operations to hang, closes #1455. --- .../cluster/routing/PlainShardsIterator.java | 2 +- .../structure/RoutingIteratorTests.java | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/cluster/routing/PlainShardsIterator.java b/modules/elasticsearch/src/main/java/org/elasticsearch/cluster/routing/PlainShardsIterator.java index 212b1980153..4feba1912cf 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/cluster/routing/PlainShardsIterator.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/cluster/routing/PlainShardsIterator.java @@ -65,7 +65,7 @@ public class PlainShardsIterator implements ShardsIterator { if (size == 0) { return null; } - return shards.get((index + 1) % size); + return shards.get(index); } @Override public ShardRouting nextOrNull() { diff --git a/modules/elasticsearch/src/test/java/org/elasticsearch/cluster/structure/RoutingIteratorTests.java b/modules/elasticsearch/src/test/java/org/elasticsearch/cluster/structure/RoutingIteratorTests.java index 576c26350e6..146599633d5 100644 --- a/modules/elasticsearch/src/test/java/org/elasticsearch/cluster/structure/RoutingIteratorTests.java +++ b/modules/elasticsearch/src/test/java/org/elasticsearch/cluster/structure/RoutingIteratorTests.java @@ -93,11 +93,13 @@ public class RoutingIteratorTests { ShardIterator shardIterator = routingTable.index("test1").shard(0).shardsIt(0); assertThat(shardIterator.size(), equalTo(3)); + ShardRouting firstRouting = shardIterator.firstOrNull(); assertThat(shardIterator.firstOrNull(), notNullValue()); assertThat(shardIterator.remaining(), equalTo(3)); assertThat(shardIterator.firstOrNull(), sameInstance(shardIterator.firstOrNull())); assertThat(shardIterator.remaining(), equalTo(3)); ShardRouting shardRouting1 = shardIterator.nextOrNull(); + assertThat(firstRouting, sameInstance(shardRouting1)); assertThat(shardRouting1, notNullValue()); assertThat(shardIterator.remaining(), equalTo(2)); ShardRouting shardRouting2 = shardIterator.nextOrNull(); @@ -127,11 +129,13 @@ public class RoutingIteratorTests { ShardIterator shardIterator = routingTable.index("test1").shard(0).shardsIt(0); assertThat(shardIterator.size(), equalTo(2)); + ShardRouting firstRouting = shardIterator.firstOrNull(); assertThat(shardIterator.firstOrNull(), notNullValue()); assertThat(shardIterator.remaining(), equalTo(2)); assertThat(shardIterator.firstOrNull(), sameInstance(shardIterator.firstOrNull())); assertThat(shardIterator.remaining(), equalTo(2)); ShardRouting shardRouting1 = shardIterator.nextOrNull(); + assertThat(shardRouting1, sameInstance(firstRouting)); assertThat(shardRouting1, notNullValue()); assertThat(shardIterator.remaining(), equalTo(1)); ShardRouting shardRouting2 = shardIterator.nextOrNull(); @@ -145,9 +149,11 @@ public class RoutingIteratorTests { shardIterator = routingTable.index("test1").shard(0).shardsIt(1); assertThat(shardIterator.size(), equalTo(2)); + firstRouting = shardIterator.firstOrNull(); assertThat(shardIterator.firstOrNull(), notNullValue()); assertThat(shardIterator.firstOrNull(), sameInstance(shardIterator.firstOrNull())); ShardRouting shardRouting3 = shardIterator.nextOrNull(); + assertThat(firstRouting, sameInstance(shardRouting3)); assertThat(shardRouting1, notNullValue()); ShardRouting shardRouting4 = shardIterator.nextOrNull(); assertThat(shardRouting2, notNullValue()); @@ -162,9 +168,11 @@ public class RoutingIteratorTests { shardIterator = routingTable.index("test1").shard(0).shardsIt(2); assertThat(shardIterator.size(), equalTo(2)); + firstRouting = shardIterator.firstOrNull(); assertThat(shardIterator.firstOrNull(), notNullValue()); assertThat(shardIterator.firstOrNull(), sameInstance(shardIterator.firstOrNull())); ShardRouting shardRouting5 = shardIterator.nextOrNull(); + assertThat(shardRouting5, sameInstance(firstRouting)); assertThat(shardRouting5, notNullValue()); ShardRouting shardRouting6 = shardIterator.nextOrNull(); assertThat(shardRouting6, notNullValue()); @@ -177,9 +185,11 @@ public class RoutingIteratorTests { shardIterator = routingTable.index("test1").shard(0).shardsIt(3); assertThat(shardIterator.size(), equalTo(2)); + firstRouting = shardIterator.firstOrNull(); assertThat(shardIterator.firstOrNull(), notNullValue()); assertThat(shardIterator.firstOrNull(), sameInstance(shardIterator.firstOrNull())); ShardRouting shardRouting7 = shardIterator.nextOrNull(); + assertThat(shardRouting7, sameInstance(firstRouting)); assertThat(shardRouting7, notNullValue()); ShardRouting shardRouting8 = shardIterator.nextOrNull(); assertThat(shardRouting8, notNullValue()); @@ -189,6 +199,23 @@ public class RoutingIteratorTests { assertThat(shardRouting7, sameInstance(shardRouting3)); assertThat(shardRouting8, sameInstance(shardRouting4)); + + shardIterator = routingTable.index("test1").shard(0).shardsIt(4); + assertThat(shardIterator.size(), equalTo(2)); + firstRouting = shardIterator.firstOrNull(); + assertThat(shardIterator.firstOrNull(), notNullValue()); + assertThat(shardIterator.firstOrNull(), sameInstance(shardIterator.firstOrNull())); + ShardRouting shardRouting9 = shardIterator.nextOrNull(); + assertThat(shardRouting9, sameInstance(firstRouting)); + assertThat(shardRouting9, notNullValue()); + ShardRouting shardRouting10 = shardIterator.nextOrNull(); + assertThat(shardRouting10, notNullValue()); + assertThat(shardRouting10, not(sameInstance(shardRouting9))); + assertThat(shardIterator.nextOrNull(), nullValue()); + assertThat(shardIterator.nextOrNull(), nullValue()); + + assertThat(shardRouting9, sameInstance(shardRouting5)); + assertThat(shardRouting10, sameInstance(shardRouting6)); } @Test public void testRandomRouting() {