[prev in list] [next in list] [prev in thread] [next in thread] 

List:       cassandra-dev
Subject:    Re: How to iterate IndexCfs
From:       Jonathan Ellis <jbellis () gmail ! com>
Date:       2014-02-18 18:09:03
Message-ID: CALdd-zjOhF-GYXq-Q8TDNhyY3gQfVZ6nw-yAiVPqONf2FH+p0g () mail ! gmail ! com
[Download RAW message or body]

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 <bblasi@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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic