Where is your LongToken coming from? LongToken is used by Murmur3Partitioner; it looks to me like you need to build a LocalToken instead (for the LocalPartitioner used by indexes).
On Tue, Feb 18, 2014 at 5:33 AM, Berenguer Blasi <bbl...@jblasi.com> wrote: > Hi all, > > I am new to cassandra and I am trying to solve something I am stuck with. It > is quite easy conceptually but I am stuck with it so maybe somebody with > knowledge of the internals knows what I am doing wrong. > > I want to slice the CFs of a secondary index. So you can try with > cfs.getRangeSlice(...) or access the cfs.getSequentialIterator(..). The > problem is no matter what ranges, combinations or methods I can think of I > always hit this exception: > > ERROR 12:30:49,416 Exception in thread Thread[ReadStage:2,5,main] > java.lang.RuntimeException: java.lang.ClassCastException: > java.nio.HeapByteBuffer cannot be cast to java.lang.Long > at > org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:1880) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) > at java.lang.Thread.run(Thread.java:744) > Caused by: java.lang.ClassCastException: java.nio.HeapByteBuffer cannot be > cast to java.lang.Long > at org.apache.cassandra.dht.LongToken.compareTo(LongToken.java:31) > at org.apache.cassandra.dht.Token$KeyBound.compareTo(Token.java:197) > at org.apache.cassandra.dht.Token$KeyBound.compareTo(Token.java:1) > at > org.apache.cassandra.utils.IntervalTree.comparePoints(IntervalTree.java:191) > at > org.apache.cassandra.utils.IntervalTree.access$2(IntervalTree.java:181) > at > org.apache.cassandra.utils.IntervalTree$IntervalNode.searchInternal(IntervalTree.java:293) > at > org.apache.cassandra.utils.IntervalTree.search(IntervalTree.java:140) > at > org.apache.cassandra.db.ColumnFamilyStore$AbstractViewSSTableFinder.sstablesForRowBounds(ColumnFamilyStore.java:1457) > at > org.apache.cassandra.db.ColumnFamilyStore$7.findSSTables(ColumnFamilyStore.java:1511) > at > org.apache.cassandra.db.ColumnFamilyStore.markReferenced(ColumnFamilyStore.java:1476) > at > org.apache.cassandra.db.ColumnFamilyStore.markReferenced(ColumnFamilyStore.java:1507) > at > org.apache.cassandra.db.ColumnFamilyStore.getSequentialIterator(ColumnFamilyStore.java:1594) > at > org.apache.cassandra.db.index.keys.KeysSearcher$1.computeNext(KeysSearcher.java:125) > at > org.apache.cassandra.db.index.keys.KeysSearcher$1.computeNext(KeysSearcher.java:1) > at > com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143) > at > com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138) > at > org.apache.cassandra.db.ColumnFamilyStore.filter(ColumnFamilyStore.java:1754) > at > org.apache.cassandra.db.index.keys.KeysSearcher.search(KeysSearcher.java:56) > at > org.apache.cassandra.db.index.SecondaryIndexManager.search(SecondaryIndexManager.java:537) > at > org.apache.cassandra.db.ColumnFamilyStore.search(ColumnFamilyStore.java:1742) > at > org.apache.cassandra.db.RangeSliceCommand.executeLocally(RangeSliceCommand.java:135) > at > org.apache.cassandra.service.StorageProxy$LocalRangeSliceRunnable.runMayThrow(StorageProxy.java:1363) > at > org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:1876) > ... 3 more > > Here he is trying to compare a Long (range is a long) to a > LocalToken(comparator=LongType, token=HeapByteBuffer(=1968)) where my query > was 'select * from users where birth_date>=1968' and birth_date is a Long. > > So it looks almost right as the LocalToken has the LongComparator etc. but > it is failing obviously. > > My suspicion is that here we are trying to look for the 1968 parition of the > index, and this 1968 happens to not be a Long which is what range is > providing. > > Any clues on what might actually be happening?? > > Thanks a lot in advance. -- Jonathan Ellis Project Chair, Apache Cassandra co-founder, http://www.datastax.com @spyced