What version are you looking at ?

I *think* it should be testing against the start of the next slice. It should not have to test any more as per the comments at the top of IndexedSliceReader, the slices are ordered. (I'm not sure if slices can overlap though)

The best way I can think to exercise that code is create a CQL 3 table with a list column, add some elements to it and then delete the column. That should trigger a multi range read, see the code in DeleteStatement. 

Good catch, can you raise a ticket if you find a problem ? 


Aaron Morton
Freelance Cassandra Developer
New Zealand


On 2/02/2013, at 1:01 AM, Ravikumar Govindarajan <ravikumar.govindarajan@gmail.com> wrote:

The issue is described at the bottom. Pinging user-list since am not sure how to confirm this bug

SimpleBlockFetcher.java, constructor

for (int i = 0; i < columns; i++)
                OnDiskAtom column = atomSerializer.deserializeFromSSTable(file, sstable.descriptor.version);

                // col is before slice
                // (If in slice, don't bother checking that until we change slice)
                if (!inSlice && isColumnBeforeSliceStart(column))

                // col is within slice
                if (isColumnBeforeSliceFinish(column))
                    inSlice = true;
                    inSlice = false;
                    if (!setNextSlice())
                         We have moved to the next slice here. But the current "column" is not checked against the next slice.
                         Ex: my ColumnSlices are [a-c], [d-f] and I search for [e] and the current "column" = [e]. 

                         In-fact it need not be just next slice. It could be any arbitrary slice that might match the current "column"