HI,
We just recently tried to use 0.6.4 in our production environment and
had some serious problem.
The getRangeSlices functionality is broken.
We have a cluster of 5 machines.
We use getRangeSlices to iterate over all of the keys in a cf (2062 keys total).
We are using OrderPreservingPartitioner.
We use getRangeSlices with KeyRange using keys (not tokens).
If we set the requestBlockCount (aka: KeyRange.setCount()) to a number
greater than 2062 we get all keys in one shot (all is good).
If we try to fetch the keys in smaller blocks (requestBlockCount=100)
we get BAD RESULTS.
We get only 800 unique keys back.
We start with (startKey="" and endKey="") then, after each iteration,
we set the startKey=lastMaxKey from the prior iteration (to get
lastMaxKey we use String.Compare to track the largest one from prior
iteration [we do this cause we assume keys might come back out of
order]).
Our keys are strings (obviously the only option in 0.6) that represent numbers.
Some Sample keys are: (in correct lexi order)
-1
11113
11457
6831
7035
8060
8839
------
This code (without any changes) was working correctly under 0.6.3 (we
got same response from getRangeSlices if using requestBlockCounts of
10,000 or 100).
When we upgraded to 0.6.4 it stopped working.
We tried the 0.6 branch (built the classes and created a
cassandra.jar) but it still did not work.
We reverted back to 0.6.3 and (again, without changing the code) it
started working again.
--------
One thing we learned is that when upgrading to the next version, we
better run a lot of tests to make sure something is not broken going
forward.
--------
What gives?
Is this a known bug? I could not find anything in JIRA (only one about
RandomPartitioner).
Any Clues?