You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by li...@apache.org on 2014/02/11 19:28:25 UTC

svn commit: r1567265 - in /hbase/branches/0.89-fb/src: main/java/org/apache/hadoop/hbase/thrift/ main/java/org/apache/hadoop/hbase/thrift/generated/ main/resources/org/apache/hadoop/hbase/thrift/ test/java/org/apache/hadoop/hbase/thrift/

Author: liyin
Date: Tue Feb 11 18:28:25 2014
New Revision: 1567265

URL: http://svn.apache.org/r1567265
Log:
[HBASE-10450] Java change for "Add Scanner::setMinTimestamp"

Author: daviddeng

Summary:
Add TScan.minTimestamp in thrift file
Recompile the thrift
Change calling to Scan.setTimeRange in HBaseHandler.scannerOpenWithScan

Test Plan:
TestThriftServer

Reviewers: gauravm, manukranthk, liyintang, aaiyer, adela

Reviewed By: liyintang

CC: hbase-eng@, khadkevich

Differential Revision: https://phabricator.fb.com/D1152248

Task ID: 3609535

Added:
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/HbaseConstants.java
      - copied, changed from r1567264, hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/Constants.java
    hbase/branches/0.89-fb/src/main/resources/org/apache/hadoop/hbase/thrift/thrift.sh
Modified:
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/Constants.java
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/TScan.java
    hbase/branches/0.89-fb/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
    hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/thrift/TestThriftServer.java

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java?rev=1567265&r1=1567264&r2=1567265&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java Tue Feb 11 18:28:25 2014
@@ -1110,6 +1110,7 @@ public class ThriftServerRunner implemen
       }
     }
 
+    @Override
     public void scannerClose(int id) throws IOError, IllegalArgument {
       LOG.debug("scannerClose: id=" + id);
       ResultScanner scanner = getScanner(id);
@@ -1120,6 +1121,7 @@ public class ThriftServerRunner implemen
       removeScanner(id);
     }
 
+    @Override
     public List<TRowResult> scannerGetList(int id,int nbRows) throws IllegalArgument, IOError {
         LOG.debug("scannerGetList: id=" + id);
         ResultScanner scanner = getScanner(id);
@@ -1141,6 +1143,7 @@ public class ThriftServerRunner implemen
         return ThriftUtilities.rowResultFromHBase(results);
     }
 
+    @Override
     public List<TRowResult> scannerGet(int id) throws IllegalArgument, IOError {
         return scannerGetList(id,1);
     }
@@ -1226,8 +1229,12 @@ public class ThriftServerRunner implemen
         if (tScan.isSetStopRow()) {
           scan.setStopRow(tScan.getStopRow());
         }
-        if (tScan.isSetTimestamp()) {
-          scan.setTimeRange(Long.MIN_VALUE, tScan.getTimestamp());
+        if (tScan.isSetTimestamp() || tScan.isSetMinTimestamp()) {
+          long minTS = tScan.isSetMinTimestamp() ? tScan.getMinTimestamp()
+              : Long.MIN_VALUE;
+          long maxTS = tScan.isSetTimestamp() ? tScan.getTimestamp()
+              : Long.MAX_VALUE;
+          scan.setTimeRange(minTS, maxTS);
         }
         if (tScan.isSetCaching()) {
           scan.setCaching(tScan.getCaching());

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/Constants.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/Constants.java?rev=1567265&r1=1567264&r2=1567265&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/Constants.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/Constants.java Tue Feb 11 18:28:25 2014
@@ -1,34 +0,0 @@
-/**
- * Autogenerated by Thrift Compiler (0.8.0)
- *
- * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
- *  @generated
- */
-package org.apache.hadoop.hbase.thrift.generated;
-
-import org.apache.thrift.scheme.IScheme;
-import org.apache.thrift.scheme.SchemeFactory;
-import org.apache.thrift.scheme.StandardScheme;
-
-import org.apache.thrift.scheme.TupleScheme;
-import org.apache.thrift.protocol.TTupleProtocol;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.EnumMap;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.EnumSet;
-import java.util.Collections;
-import java.util.BitSet;
-import java.nio.ByteBuffer;
-import java.util.Arrays;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class Constants {
-
-  public static final long LATEST_TIMESTAMP = 9223372036854775807L;
-
-}

Copied: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/HbaseConstants.java (from r1567264, hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/Constants.java)
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/HbaseConstants.java?p2=hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/HbaseConstants.java&p1=hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/Constants.java&r1=1567264&r2=1567265&rev=1567265&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/Constants.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/HbaseConstants.java Tue Feb 11 18:28:25 2014
@@ -1,17 +1,23 @@
 /**
- * Autogenerated by Thrift Compiler (0.8.0)
+ * Autogenerated by Thrift Compiler (0.9.1)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
  */
 package org.apache.hadoop.hbase.thrift.generated;
 
+import org.apache.commons.lang3.builder.HashCodeBuilder;
 import org.apache.thrift.scheme.IScheme;
 import org.apache.thrift.scheme.SchemeFactory;
 import org.apache.thrift.scheme.StandardScheme;
 
 import org.apache.thrift.scheme.TupleScheme;
 import org.apache.thrift.protocol.TTupleProtocol;
+import org.apache.thrift.protocol.TProtocolException;
+import org.apache.thrift.EncodingUtils;
+import org.apache.thrift.TException;
+import org.apache.thrift.async.AsyncMethodCallback;
+import org.apache.thrift.server.AbstractNonblockingServer.*;
 import java.util.List;
 import java.util.ArrayList;
 import java.util.Map;
@@ -27,7 +33,7 @@ import java.util.Arrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class Constants {
+public class HbaseConstants {
 
   public static final long LATEST_TIMESTAMP = 9223372036854775807L;
 

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/TScan.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/TScan.java?rev=1567265&r1=1567264&r2=1567265&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/TScan.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/TScan.java Tue Feb 11 18:28:25 2014
@@ -47,6 +47,7 @@ public class TScan implements org.apache
   private static final org.apache.thrift.protocol.TField FILTER_STRING_FIELD_DESC = new org.apache.thrift.protocol.TField("filterString", org.apache.thrift.protocol.TType.STRING, (short)6);
   private static final org.apache.thrift.protocol.TField CACHING_BLOCKS_ENABLED_FIELD_DESC = new org.apache.thrift.protocol.TField("cachingBlocksEnabled", org.apache.thrift.protocol.TType.BOOL, (short)7);
   private static final org.apache.thrift.protocol.TField BATCH_LIMIT_FIELD_DESC = new org.apache.thrift.protocol.TField("batchLimit", org.apache.thrift.protocol.TType.I32, (short)8);
+  private static final org.apache.thrift.protocol.TField MIN_TIMESTAMP_FIELD_DESC = new org.apache.thrift.protocol.TField("minTimestamp", org.apache.thrift.protocol.TType.I64, (short)9);
 
   private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
   static {
@@ -62,6 +63,7 @@ public class TScan implements org.apache
   public ByteBuffer filterString; // optional
   public boolean cachingBlocksEnabled; // optional
   public int batchLimit; // optional
+  public long minTimestamp; // optional
 
   /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
   public enum _Fields implements org.apache.thrift.TFieldIdEnum {
@@ -72,7 +74,8 @@ public class TScan implements org.apache
     CACHING((short)5, "caching"),
     FILTER_STRING((short)6, "filterString"),
     CACHING_BLOCKS_ENABLED((short)7, "cachingBlocksEnabled"),
-    BATCH_LIMIT((short)8, "batchLimit");
+    BATCH_LIMIT((short)8, "batchLimit"),
+    MIN_TIMESTAMP((short)9, "minTimestamp");
 
     private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -103,6 +106,8 @@ public class TScan implements org.apache
           return CACHING_BLOCKS_ENABLED;
         case 8: // BATCH_LIMIT
           return BATCH_LIMIT;
+        case 9: // MIN_TIMESTAMP
+          return MIN_TIMESTAMP;
         default:
           return null;
       }
@@ -147,8 +152,9 @@ public class TScan implements org.apache
   private static final int __CACHING_ISSET_ID = 1;
   private static final int __CACHINGBLOCKSENABLED_ISSET_ID = 2;
   private static final int __BATCHLIMIT_ISSET_ID = 3;
+  private static final int __MINTIMESTAMP_ISSET_ID = 4;
   private byte __isset_bitfield = 0;
-  private _Fields optionals[] = {_Fields.START_ROW,_Fields.STOP_ROW,_Fields.TIMESTAMP,_Fields.COLUMNS,_Fields.CACHING,_Fields.FILTER_STRING,_Fields.CACHING_BLOCKS_ENABLED,_Fields.BATCH_LIMIT};
+  private _Fields optionals[] = {_Fields.START_ROW,_Fields.STOP_ROW,_Fields.TIMESTAMP,_Fields.COLUMNS,_Fields.CACHING,_Fields.FILTER_STRING,_Fields.CACHING_BLOCKS_ENABLED,_Fields.BATCH_LIMIT,_Fields.MIN_TIMESTAMP};
   public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
   static {
     Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
@@ -169,6 +175,8 @@ public class TScan implements org.apache
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
     tmpMap.put(_Fields.BATCH_LIMIT, new org.apache.thrift.meta_data.FieldMetaData("batchLimit", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+    tmpMap.put(_Fields.MIN_TIMESTAMP, new org.apache.thrift.meta_data.FieldMetaData("minTimestamp", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
     metaDataMap = Collections.unmodifiableMap(tmpMap);
     org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(TScan.class, metaDataMap);
   }
@@ -201,6 +209,7 @@ public class TScan implements org.apache
     }
     this.cachingBlocksEnabled = other.cachingBlocksEnabled;
     this.batchLimit = other.batchLimit;
+    this.minTimestamp = other.minTimestamp;
   }
 
   public TScan deepCopy() {
@@ -221,6 +230,8 @@ public class TScan implements org.apache
     this.cachingBlocksEnabled = false;
     setBatchLimitIsSet(false);
     this.batchLimit = 0;
+    setMinTimestampIsSet(false);
+    this.minTimestamp = 0;
   }
 
   public byte[] getStartRow() {
@@ -456,6 +467,29 @@ public class TScan implements org.apache
     __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __BATCHLIMIT_ISSET_ID, value);
   }
 
+  public long getMinTimestamp() {
+    return this.minTimestamp;
+  }
+
+  public TScan setMinTimestamp(long minTimestamp) {
+    this.minTimestamp = minTimestamp;
+    setMinTimestampIsSet(true);
+    return this;
+  }
+
+  public void unsetMinTimestamp() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MINTIMESTAMP_ISSET_ID);
+  }
+
+  /** Returns true if field minTimestamp is set (has been assigned a value) and false otherwise */
+  public boolean isSetMinTimestamp() {
+    return EncodingUtils.testBit(__isset_bitfield, __MINTIMESTAMP_ISSET_ID);
+  }
+
+  public void setMinTimestampIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MINTIMESTAMP_ISSET_ID, value);
+  }
+
   public void setFieldValue(_Fields field, Object value) {
     switch (field) {
     case START_ROW:
@@ -522,6 +556,14 @@ public class TScan implements org.apache
       }
       break;
 
+    case MIN_TIMESTAMP:
+      if (value == null) {
+        unsetMinTimestamp();
+      } else {
+        setMinTimestamp((Long)value);
+      }
+      break;
+
     }
   }
 
@@ -551,6 +593,9 @@ public class TScan implements org.apache
     case BATCH_LIMIT:
       return Integer.valueOf(getBatchLimit());
 
+    case MIN_TIMESTAMP:
+      return Long.valueOf(getMinTimestamp());
+
     }
     throw new IllegalStateException();
   }
@@ -578,6 +623,8 @@ public class TScan implements org.apache
       return isSetCachingBlocksEnabled();
     case BATCH_LIMIT:
       return isSetBatchLimit();
+    case MIN_TIMESTAMP:
+      return isSetMinTimestamp();
     }
     throw new IllegalStateException();
   }
@@ -667,6 +714,15 @@ public class TScan implements org.apache
         return false;
     }
 
+    boolean this_present_minTimestamp = true && this.isSetMinTimestamp();
+    boolean that_present_minTimestamp = true && that.isSetMinTimestamp();
+    if (this_present_minTimestamp || that_present_minTimestamp) {
+      if (!(this_present_minTimestamp && that_present_minTimestamp))
+        return false;
+      if (this.minTimestamp != that.minTimestamp)
+        return false;
+    }
+
     return true;
   }
 
@@ -714,6 +770,11 @@ public class TScan implements org.apache
     if (present_batchLimit)
       builder.append(batchLimit);
 
+    boolean present_minTimestamp = true && (isSetMinTimestamp());
+    builder.append(present_minTimestamp);
+    if (present_minTimestamp)
+      builder.append(minTimestamp);
+
     return builder.toHashCode();
   }
 
@@ -805,6 +866,16 @@ public class TScan implements org.apache
         return lastComparison;
       }
     }
+    lastComparison = Boolean.valueOf(isSetMinTimestamp()).compareTo(other.isSetMinTimestamp());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetMinTimestamp()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.minTimestamp, other.minTimestamp);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
     return 0;
   }
 
@@ -888,6 +959,12 @@ public class TScan implements org.apache
       sb.append(this.batchLimit);
       first = false;
     }
+    if (isSetMinTimestamp()) {
+      if (!first) sb.append(", ");
+      sb.append("minTimestamp:");
+      sb.append(this.minTimestamp);
+      first = false;
+    }
     sb.append(")");
     return sb.toString();
   }
@@ -1007,6 +1084,14 @@ public class TScan implements org.apache
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
+          case 9: // MIN_TIMESTAMP
+            if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+              struct.minTimestamp = iprot.readI64();
+              struct.setMinTimestampIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
           default:
             org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
         }
@@ -1077,6 +1162,11 @@ public class TScan implements org.apache
         oprot.writeI32(struct.batchLimit);
         oprot.writeFieldEnd();
       }
+      if (struct.isSetMinTimestamp()) {
+        oprot.writeFieldBegin(MIN_TIMESTAMP_FIELD_DESC);
+        oprot.writeI64(struct.minTimestamp);
+        oprot.writeFieldEnd();
+      }
       oprot.writeFieldStop();
       oprot.writeStructEnd();
     }
@@ -1119,7 +1209,10 @@ public class TScan implements org.apache
       if (struct.isSetBatchLimit()) {
         optionals.set(7);
       }
-      oprot.writeBitSet(optionals, 8);
+      if (struct.isSetMinTimestamp()) {
+        optionals.set(8);
+      }
+      oprot.writeBitSet(optionals, 9);
       if (struct.isSetStartRow()) {
         oprot.writeBinary(struct.startRow);
       }
@@ -1150,12 +1243,15 @@ public class TScan implements org.apache
       if (struct.isSetBatchLimit()) {
         oprot.writeI32(struct.batchLimit);
       }
+      if (struct.isSetMinTimestamp()) {
+        oprot.writeI64(struct.minTimestamp);
+      }
     }
 
     @Override
     public void read(org.apache.thrift.protocol.TProtocol prot, TScan struct) throws org.apache.thrift.TException {
       TTupleProtocol iprot = (TTupleProtocol) prot;
-      BitSet incoming = iprot.readBitSet(8);
+      BitSet incoming = iprot.readBitSet(9);
       if (incoming.get(0)) {
         struct.startRow = iprot.readBinary();
         struct.setStartRowIsSet(true);
@@ -1197,6 +1293,10 @@ public class TScan implements org.apache
         struct.batchLimit = iprot.readI32();
         struct.setBatchLimitIsSet(true);
       }
+      if (incoming.get(8)) {
+        struct.minTimestamp = iprot.readI64();
+        struct.setMinTimestampIsSet(true);
+      }
     }
   }
 

Modified: hbase/branches/0.89-fb/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift?rev=1567265&r1=1567264&r2=1567265&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift (original)
+++ hbase/branches/0.89-fb/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift Tue Feb 11 18:28:25 2014
@@ -133,7 +133,8 @@ struct TScan {
   5:optional i32 caching,
   6:optional Text filterString,
   7:optional bool cachingBlocksEnabled,
-  8:optional i32 batchLimit
+  8:optional i32 batchLimit,
+  9:optional i64 minTimestamp
 }
 
 //

Added: hbase/branches/0.89-fb/src/main/resources/org/apache/hadoop/hbase/thrift/thrift.sh
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/resources/org/apache/hadoop/hbase/thrift/thrift.sh?rev=1567265&view=auto
==============================================================================
--- hbase/branches/0.89-fb/src/main/resources/org/apache/hadoop/hbase/thrift/thrift.sh (added)
+++ hbase/branches/0.89-fb/src/main/resources/org/apache/hadoop/hbase/thrift/thrift.sh Tue Feb 11 18:28:25 2014
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+LANG="java"
+SOURCE="Hbase.thrift"
+THRIFT="thrift-apache"
+OUTPUT="../../../../../../java"
+PKG_PATH="org/apache/hadoop/hbase/thrift/generated"
+LOCAL_DIR="gen-$LANG"
+VERSION="Thrift version 0.9.1"
+
+# check thrift version
+if [ "`$THRIFT -version`" != "$VERSION" ]; then
+  echo "Please use thrift with the version: $VERSION"
+  exit 1
+fi
+
+rm -rf $LOCAL_DIR
+$THRIFT --gen $LANG:hashcode $SOURCE
+rm -rf $OUTPUT/$PKG_PATH/*
+mv $LOCAL_DIR/$PKG_PATH/* $OUTPUT/$PKG_PATH/
+rm -rf $LOCAL_DIR

Modified: hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/thrift/TestThriftServer.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/thrift/TestThriftServer.java?rev=1567265&r1=1567264&r2=1567265&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/thrift/TestThriftServer.java (original)
+++ hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/thrift/TestThriftServer.java Tue Feb 11 18:28:25 2014
@@ -40,13 +40,14 @@ import org.apache.hadoop.hbase.io.hfile.
 import org.apache.hadoop.hbase.regionserver.StoreFile;
 import org.apache.hadoop.hbase.thrift.generated.BatchMutation;
 import org.apache.hadoop.hbase.thrift.generated.ColumnDescriptor;
-import org.apache.hadoop.hbase.thrift.generated.Constants;
 import org.apache.hadoop.hbase.thrift.generated.Hbase;
+import org.apache.hadoop.hbase.thrift.generated.HbaseConstants;
 import org.apache.hadoop.hbase.thrift.generated.IOError;
 import org.apache.hadoop.hbase.thrift.generated.Mutation;
 import org.apache.hadoop.hbase.thrift.generated.TCell;
 import org.apache.hadoop.hbase.thrift.generated.TRegionInfo;
 import org.apache.hadoop.hbase.thrift.generated.TRowResult;
+import org.apache.hadoop.hbase.thrift.generated.TScan;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.Threads;
 import org.apache.hadoop.metrics.ContextFactory;
@@ -369,6 +370,7 @@ public class TestThriftServer {
    *
    * @throws Exception
    */
+  @SuppressWarnings("deprecation")
   @Test
   public void doTestTableTimestampsAndColumns() throws Exception {
     // Setup
@@ -512,6 +514,18 @@ public class TestThriftServer {
       TRowResult rowResult4a = handler.scannerGet(scanner4).get(0);
       assertEquals(rowResult4a.columns.size(), 1);
       assertBufferEquals(rowResult4a.columns.get(columnBname).value, valueBname);
+      closeScanner(scanner4, handler);
+
+      // Test MinTimestamp
+      TScan tScan = new TScan();
+      tScan.setStartRow(rowAname);
+      tScan.setColumns(getColumnList(true, true));
+      tScan.setMinTimestamp(time1 - 1);
+      tScan.setTimestamp(time1);
+      int scanner5 = handler.scannerOpenWithScan(tableAname, tScan);
+      TRowResult result5 = handler.scannerGet(scanner5).get(0);
+      assertBufferEquals(result5.columns.get(columnBname).value, valueBname);
+      closeScanner(scanner5, handler);
     } finally {
       // Teardown
       handler.disableTable(tableAname);
@@ -544,6 +558,8 @@ public class TestThriftServer {
     LOG.info("Region found:" + regions.get(0));
     handler.disableTable(tableAname);
     handler.deleteTable(tableAname);
+    ((ThriftServerRunner.HBaseHandler) handler).getTable(tableAname)
+        .clearRegionCache();
     regionCount = handler.getTableRegions(tableAname).size();
     assertEquals("non-existing table should have 0 region, " +
             "but found " + regionCount, regionCount, 0);
@@ -685,6 +701,6 @@ public class TestThriftServer {
 
   @Test
   public void testMaxTimestamp() {
-    assertEquals(HConstants.LATEST_TIMESTAMP, Constants.LATEST_TIMESTAMP);
+    assertEquals(HConstants.LATEST_TIMESTAMP, HbaseConstants.LATEST_TIMESTAMP);
   }
 }