On Mon, Apr 1, 2013 at 10:19 PM, aaron morton <aa...@thelastpickle.com> wrote:
> ERROR [Thread-232] 2013-04-01 22:22:21,760 CassandraDaemon.java (line
> 133) Exception in thread Thread[Thread-232,5,main]
> java.lang.IndexOutOfBoundsException: index (2) must be less than size (2)
>        at
> com.google.common.base.Preconditions.checkElementIndex(Preconditions.java:305)
>        at
> com.google.common.base.Preconditions.checkElementIndex(Preconditions.java:284)
>        at
> com.google.common.collect.RegularImmutableList.get(RegularImmutableList.java:81)
>        at
> org.apache.cassandra.db.marshal.CompositeType.getComparator(CompositeType.java:96)
>
> Something odd in the schema world perhaps.
>
> Has the schema changed recently?

No, not recently.  But during development we experimented with other
comparator types for those CFs.  More info below.

> Do yo have more than one schema in the cluster ? (describe cluster in
> cassandra-cli)

I don't think so, that command in cassandra-cli shows just a single
schema in the cluster:

Cluster Information:
   Snitch: org.apache.cassandra.locator.Ec2Snitch
   Partitioner: org.apache.cassandra.dht.RandomPartitioner
   Schema versions:
126b31ad-3660-3831-9d4f-c6763c9acc97: [ ...ip list... ]


This error happened on a CF where the composite is: (Integer, UTF8)

I'm a bit stumped about how we could get the an index==2 in that code
pathway.  See here:
https://github.com/apache/cassandra/blob/cassandra-1.2.1/src/java/org/apache/cassandra/db/marshal/AbstractCompositeType.java

...start at line 63 in compare.

My Java is terrible, but all of our CompositeTypes are composites of
only two types.  Thus the counter 'i' should never get up to 2 (it is
used to access by index to individual comparator types within the
composite), unless the value of the first two components in each of
the column names being compared are equal, which should be impossible.

During development we experimented with other comparator types for
those CFs.  We deleted and recreated those CFs before moving into
production mode.  Is there a chance Cassandra 'remembers' these old
types from a deleted CF that shares a name with an existing CF?  Could
that be causing improper parsing of comparator column names?

That we enter this code pathway from a section that seems to want to
clean up tombstones makes me think this is a possibility, that there
is a tombstone somewhere whose composite column name is causing
issues.

Dane

Reply via email to