>             int loc = (index + i) % activeShards.size();

index is NOT negative, but (index + i) is negative.

Regards,
 shinsuke

2014年3月26日水曜日 19時43分20秒 UTC+9 Kevin Wang:
>
> pickIndex() will return the absolute value of the count, so it won't 
> return a negative value. Can you provide more details?
>
>
> Kevin
>
>
> On Wednesday, March 26, 2014 3:53:15 PM UTC+11, Shinsuke Sugaya wrote:
>>
>> Hi
>>
>> I encountered the following problem:
>>
>> Caused by: java.lang.IndexOutOfBoundsException: index (-2) must not be 
>> negative
>>         at 
>> org.elasticsearch.common.base.Preconditions.checkElementIndex(Preconditions.java:306)
>>         at 
>> org.elasticsearch.common.base.Preconditions.checkElementIndex(Preconditions.java:285)
>>         at 
>> org.elasticsearch.common.collect.RegularImmutableList.get(RegularImmutableList.java:65)
>>         at 
>> org.elasticsearch.cluster.routing.IndexShardRoutingTable.preferNodeActiveInitializingShardsIt(IndexShardRoutingTable.java:378)
>>         at 
>> org.elasticsearch.cluster.routing.operation.plain.PlainOperationRouting.preferenceActiveShardIterator(PlainOperationRouting.java:210)
>>         at 
>> org.elasticsearch.cluster.routing.operation.plain.PlainOperationRouting.getShards(PlainOperationRouting.java:80)
>>         at 
>> org.elasticsearch.action.get.TransportGetAction.shards(TransportGetAction.java:80)
>>         at 
>> org.elasticsearch.action.get.TransportGetAction.shards(TransportGetAction.java:42)
>>         at 
>> org.elasticsearch.action.support.single.shard.TransportShardSingleOperationAction$AsyncSingleAction.<init>(TransportShardSingleOperationAction.java:121)
>>         at 
>> org.elasticsearch.action.support.single.shard.TransportShardSingleOperationAction$AsyncSingleAction.<init>(TransportShardSingleOperationAction.java:97)
>>         at 
>> org.elasticsearch.action.support.single.shard.TransportShardSingleOperationAction.doExecute(TransportShardSingleOperationAction.java:74)
>>         at 
>> org.elasticsearch.action.support.single.shard.TransportShardSingleOperationAction.doExecute(TransportShardSingleOperationAction.java:49)
>>         at 
>> org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:63)
>>         at 
>> org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:49)
>>         at 
>> org.elasticsearch.client.node.NodeClient.execute(NodeClient.java:85)
>>         at 
>> org.elasticsearch.client.support.AbstractClient.get(AbstractClient.java:174)
>>         ... 9 more
>>
>> My environment is:
>>
>>  - Elasticserach 0.90.7
>>  - 3 nodes in a cluster
>>  - Send GET request with preference=_local
>>
>> Looking into IndexShardRoutingTable class, it seems that "loc" is 
>> an unexpected negative value at the following code. pickIndex method 
>> returns a value of "counter"(incremental value). If "counter" achieves 
>> Integer.MAX_VALUE, I think that "loc" is negative and then 
>> activeShards.get(loc) throws the exception.
>>
>>         int index = pickIndex();
>>         for (int i = 0; i < activeShards.size(); i++) {
>>             int loc = (index + i) % activeShards.size();
>>
>> If it's a bug, I'll file an issue.
>>
>> Best regards,
>>  shinsuke
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elasticsearch/f3649939-fa7b-4db6-b3d5-b1eb3329abed%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to