Index: src/main/java/org/apache/hadoop/hbase/io/HalfStoreFileReader.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/io/HalfStoreFileReader.java (revision 1338030) +++ src/main/java/org/apache/hadoop/hbase/io/HalfStoreFileReader.java (working copy) @@ -141,8 +141,11 @@ public boolean seekBefore(byte [] key, int offset, int length) throws IOException { if (top) { - if (getComparator().compare(key, offset, length, splitkey, 0, - splitkey.length) < 0) { + short lrowlength = Bytes.toShort(key, offset); + short rrowlength = Bytes.toShort(splitkey, 0); + // Compare only the rowkey bytes of the passed key and splitkey + if (Bytes.compareTo(key, offset + Bytes.SIZEOF_SHORT, lrowlength, + splitkey, Bytes.SIZEOF_SHORT, rrowlength) <= 0) { return false; } } else { Index: src/test/java/org/apache/hadoop/hbase/io/TestHalfStoreFileReader.java =================================================================== --- src/test/java/org/apache/hadoop/hbase/io/TestHalfStoreFileReader.java (revision 1339993) +++ src/test/java/org/apache/hadoop/hbase/io/TestHalfStoreFileReader.java (working copy) @@ -195,6 +195,9 @@ foundKeyValue = doTestOfSeekBefore(p, fs, bottom, items.get(1), cacheConf); assertEquals(items.get(0), foundKeyValue); + // Try to seek before the splitKey in the top file + foundKeyValue = doTestOfSeekBefore(p, fs, top, midKV, cacheConf); + assertNull(foundKeyValue); } private KeyValue doTestOfSeekBefore(Path p, FileSystem fs, Reference bottom, KeyValue seekBefore,