Author: jimk Date: Mon Jun 11 13:52:29 2007 New Revision: 546275 URL: http://svn.apache.org/viewvc?view=rev&rev=546275 Log: HADOOP-1479 Fix NPE in HStore#get if store file only has keys < passed key.
Modified: lucene/hadoop/trunk/src/contrib/hbase/CHANGES.txt lucene/hadoop/trunk/src/contrib/hbase/src/java/org/apache/hadoop/hbase/HStore.java Modified: lucene/hadoop/trunk/src/contrib/hbase/CHANGES.txt URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/contrib/hbase/CHANGES.txt?view=diff&rev=546275&r1=546274&r2=546275 ============================================================================== --- lucene/hadoop/trunk/src/contrib/hbase/CHANGES.txt (original) +++ lucene/hadoop/trunk/src/contrib/hbase/CHANGES.txt Mon Jun 11 13:52:29 2007 @@ -28,3 +28,4 @@ 15. HADOOP-1421 Failover detection, split log files. For the files modified, also clean up javadoc, class, field and method visibility (HADOOP-1466) + 16. HADOOP-1479 Fix NPE in HStore#get if store file only has keys < passed key. Modified: lucene/hadoop/trunk/src/contrib/hbase/src/java/org/apache/hadoop/hbase/HStore.java URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/contrib/hbase/src/java/org/apache/hadoop/hbase/HStore.java?view=diff&rev=546275&r1=546274&r2=546275 ============================================================================== --- lucene/hadoop/trunk/src/contrib/hbase/src/java/org/apache/hadoop/hbase/HStore.java (original) +++ lucene/hadoop/trunk/src/contrib/hbase/src/java/org/apache/hadoop/hbase/HStore.java Mon Jun 11 13:52:29 2007 @@ -835,7 +835,7 @@ * If 'numVersions' is negative, the method returns all available versions. */ BytesWritable[] get(HStoreKey key, int numVersions) throws IOException { - if(numVersions <= 0) { + if (numVersions <= 0) { throw new IllegalArgumentException("Number of versions must be > 0"); } @@ -852,15 +852,19 @@ BytesWritable readval = new BytesWritable(); map.reset(); HStoreKey readkey = (HStoreKey)map.getClosest(key, readval); - - if(readkey.matchesRowCol(key)) { + if (readkey == null) { + // map.getClosest returns null if the passed key is > than the + // last key in the map file. getClosest is a bit of a misnomer + // since it returns exact match or the next closest key AFTER not + // BEFORE. + continue; + } + if (readkey.matchesRowCol(key)) { results.add(readval); readval = new BytesWritable(); - while(map.next(readkey, readval) && readkey.matchesRowCol(key)) { - if(numVersions > 0 && (results.size() >= numVersions)) { + if (numVersions > 0 && (results.size() >= numVersions)) { break; - } results.add(readval); readval = new BytesWritable();