Ignace, Thanks for reporting this. I've been able to reproduce the issue with a unit test, so I opened https://issues.apache.org/jira/browse/CASSANDRA-6638. I'm not 100% sure if your fix is the correct one, but I should be able to get it fixed quickly and figure out the full set of cases where a key (or keys) may be skipped.
On Wed, Jan 29, 2014 at 9:53 AM, Desimpel, Ignace < ignace.desim...@nuance.com> wrote: > Got into a problem when testing a vnode setup. > > I'm using a byteordered partitioner, linux, code version 2.0.4, > replication factor 1, 4 machine > > All goes ok until I run cleanup, and gets worse when adding / > decommissioning nodes. > > > > In my opinion the problem can be found in the SSTableScanner:: > KeyScanningIterator::computeNext routine at the lines > > > > currentRange = rangeIterator.next(); > > seekToCurrentRangeStart(); > > if (ifile.isEOF())return endOfData(); > > > > To see what is wrong, think of having 3 ranges in the list, and both the > first and second range will not produce a valid currentKey. The first time > in the loop we get the first range, and then call > seekToCurrentRangeStart(). That routine doesn't do anything in that case, > so then the first key is read from the sstable. But this first key does not > match the first range, so we loop again. We get the second range and call > seekToCurrentRangeStart() again. Again this does not do anything, leaving > all file pointers. So then a new currentKey is read from the sstable BUT > that should not be the case. We should, in that case, continue to test with > the 'old' currentKey. So in that case we are SKIPPING (possible) VALID > RECORDS !!! > > > > To make things worse, in my test case, I only had one key. So when I get > into the second loop, the test isEOF() was true, so the routine stopped > immediately having 100 ranges still to test. > > > > Anyway, attached a new version of the SSTableScanner.java file. Seems to > work for me, but I'm sure a more experienced eye should have a look at this > problem (and/or possible other scanners and/or situations like scrub, range > queries ...?). > > > > Well, I hope I'm wrong about this.... > > > > Regards, > > > > Ignace Desimpel > > > > > > > > > -- Tyler Hobbs DataStax <http://datastax.com/>