Index: src/main/java/org/apache/hadoop/hbase/filter/TimestampsFilter.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/filter/TimestampsFilter.java (revision 997639) +++ src/main/java/org/apache/hadoop/hbase/filter/TimestampsFilter.java (working copy) @@ -67,7 +67,7 @@ // to be lesser than all of the other values. return ReturnCode.NEXT_COL; } - return ReturnCode.SKIP; + return ReturnCode.SEEK_NEXT_USING_HINT; } @Override @@ -88,4 +88,14 @@ out.writeLong(timestamp); } } + + @Override + public KeyValue getNextKeyHint(KeyValue kv) { + Long nextTimestampObject = timestamps.lower(kv.getTimestamp()); + long nextTimestamp = nextTimestampObject != null ? nextTimestampObject : 0; + return KeyValue.createFirstOnRow(kv.getBuffer(), kv.getRowOffset(), kv + .getRowLength(), kv.getBuffer(), kv.getFamilyOffset(), kv + .getFamilyLength(), kv.getBuffer(), kv.getQualifierOffset(), kv + .getQualifierLength(), nextTimestamp); + } } Index: src/main/java/org/apache/hadoop/hbase/KeyValue.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/KeyValue.java (revision 997639) +++ src/main/java/org/apache/hadoop/hbase/KeyValue.java (working copy) @@ -1650,6 +1650,32 @@ } /** + * Create a KeyValue for the specified row, family, qualifier, timestamp that + * would be smaller than or equal to all other possible KeyValues that have + * the same row, family, qualifier, timestamp. + * Used for seeking. + * @param row row key + * @param roffset row offset + * @param rlength row length + * @param family family name + * @param foffset family offset + * @param flength family length + * @param qualifier column qualifier + * @param qoffset qualifier offset + * @param qlength qualifier length + * @param timestamp timestamp + * @return First possible key on passed row, family, qualifier, timestamp + */ + public static KeyValue createFirstOnRow(final byte [] row, + final int roffset, final int rlength, final byte [] family, + final int foffset, final int flength, final byte [] qualifier, + final int qoffset, final int qlength, long timestamp) { + return new KeyValue(row, roffset, rlength, family, + foffset, flength, qualifier, qoffset, qlength, + timestamp, Type.Maximum, null, 0, 0); + } + + /** * @param b * @return A KeyValue made of a byte array that holds the key-only part. * Needed to convert hfile index members to KeyValues.