Is this only a ByteOrderPartitioner problem?

On Wed, Jan 29, 2014 at 7:34 PM, Tyler Hobbs <ty...@datastax.com> wrote:

> 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/>
>

Reply via email to