Check the latest fix http://issues.apache.org/jira/browse/HBASE-2635
On Wed, Jun 16, 2010 at 9:37 PM, Ted Yu <[email protected]> wrote: > What version of HBase are you using ? > > > On Wed, Jun 16, 2010 at 9:19 PM, Chase Bradford > <[email protected]>wrote: > >> Hi Everyone, >> >> I've been trying to track down a problem I'm having with sorting IBWs with >> it comparator, and it seems as though the comparator doesn't work as >> expected. >> >> The problem seems to be that IBW.Comparator extends WritableComparator, >> but >> only overrides compareBytes. WritableComparator.compare uses >> IBW.compareTo >> which compares by length, then contents, as if aiming for a big-endian >> numerical comparison. Although, it's not quite a numerical comparison, >> because it doesn't account for leading 0 bytes. >> >> I stumbled on this while trying to use the TotalOrderPartitioner with a >> partition file lexicographically sorted but with values of varying >> lengths. >> It uses the Comparator's compare() method. >> >> Can someone explain why IBW.compareTo is implemented this way? >> >> Thanks, >> Chase >> >> My test case: >> >> import org.apache.hadoop.hbase.io.ImmutableBytesWritable; >> public class Test >> { >> public static void main(String[] args){ >> ImmutableBytesWritable ibw1 = new ImmutableBytesWritable( new >> byte[]{0x0f} ); >> ImmutableBytesWritable ibw2 = new ImmutableBytesWritable( new >> byte[]{0x00, 0x00} ); >> ImmutableBytesWritable.Comparator c = new >> ImmutableBytesWritable.Comparator(); >> >> if( c.compare( ibw1, ibw2 ) < 0 ) >> System.err.println( "ibw1 < ibw2" ); >> >> System.exit(0); >> } >> } >> > >
