hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From st...@apache.org
Subject [2/2] hbase git commit: HBASE-14355 Scan different TimeRange for each column family (Churro Morales)
Date Thu, 12 Nov 2015 20:54:22 GMT
HBASE-14355 Scan different TimeRange for each column family (Churro Morales)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/290ecbe8
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/290ecbe8
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/290ecbe8

Branch: refs/heads/master
Commit: 290ecbe829662775daf7153cc0729a5465d7fb32
Parents: b677f2e
Author: stack <stack@apache.org>
Authored: Thu Nov 12 10:54:16 2015 -1000
Committer: stack <stack@apache.org>
Committed: Thu Nov 12 10:54:16 2015 -1000

----------------------------------------------------------------------
 .../org/apache/hadoop/hbase/client/Get.java     |   15 +-
 .../org/apache/hadoop/hbase/client/Query.java   |   32 +
 .../org/apache/hadoop/hbase/client/Scan.java    |   18 +-
 .../hadoop/hbase/protobuf/ProtobufUtil.java     |   83 +-
 .../org/apache/hadoop/hbase/io/TimeRange.java   |    7 +-
 .../hbase/protobuf/generated/ClientProtos.java  | 1011 +++++++++++++++---
 .../hbase/protobuf/generated/HBaseProtos.java   |  779 +++++++++++++-
 hbase-protocol/src/main/protobuf/Client.proto   |    2 +
 hbase-protocol/src/main/protobuf/HBase.proto    |    6 +
 .../hbase/regionserver/DefaultMemStore.java     |    3 +-
 .../hbase/regionserver/KeyValueScanner.java     |    8 +-
 .../regionserver/NonLazyKeyValueScanner.java    |    4 +-
 .../hadoop/hbase/regionserver/StoreFile.java    |    7 +-
 .../hbase/regionserver/StoreFileScanner.java    |   16 +-
 .../hadoop/hbase/regionserver/StoreScanner.java |    2 +-
 .../hbase/io/hfile/TestHFileWriterV2.java       |    2 +-
 .../regionserver/TestCompoundBloomFilter.java   |   16 +-
 .../hbase/regionserver/TestStoreFile.java       |   82 +-
 18 files changed, 1826 insertions(+), 267 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/290ecbe8/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Get.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Get.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Get.java
index c71ee0d..efb437f 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Get.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Get.java
@@ -125,6 +125,10 @@ public class Get extends Query
     for (Map.Entry<String, byte[]> attr : get.getAttributesMap().entrySet()) {
       setAttribute(attr.getKey(), attr.getValue());
     }
+    for (Map.Entry<byte[], TimeRange> entry : get.getColumnFamilyTimeRange().entrySet()) {
+      TimeRange tr = entry.getValue();
+      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());
+    }
   }
 
   public boolean isCheckExistenceOnly() {
@@ -195,11 +199,10 @@ public class Get extends Query
    * [minStamp, maxStamp).
    * @param minStamp minimum timestamp value, inclusive
    * @param maxStamp maximum timestamp value, exclusive
-   * @throws IOException if invalid time range
+   * @throws IOException
    * @return this for invocation chaining
    */
-  public Get setTimeRange(long minStamp, long maxStamp)
-  throws IOException {
+  public Get setTimeRange(long minStamp, long maxStamp) throws IOException {
     tr = new TimeRange(minStamp, maxStamp);
     return this;
   }
@@ -213,7 +216,7 @@ public class Get extends Query
   throws IOException {
     try {
       tr = new TimeRange(timestamp, timestamp+1);
-    } catch(IOException e) {
+    } catch(Exception e) {
       // This should never happen, unless integer overflow or something extremely wrong...
       LOG.error("TimeRange failed, likely caused by integer overflow. ", e);
       throw e;
@@ -221,6 +224,10 @@ public class Get extends Query
     return this;
   }
 
+  @Override public Get setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp) {
+    return (Get) super.setColumnFamilyTimeRange(cf, minStamp, maxStamp);
+  }
+
   /**
    * Get all available versions.
    * @return this for invocation chaining

http://git-wip-us.apache.org/repos/asf/hbase/blob/290ecbe8/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Query.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Query.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Query.java
index 9245f81..ac4e38d 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Query.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Query.java
@@ -19,10 +19,12 @@ package org.apache.hadoop.hbase.client;
 
 import java.util.Map;
 
+import com.google.common.collect.Maps;
 import org.apache.hadoop.hbase.classification.InterfaceAudience;
 import org.apache.hadoop.hbase.classification.InterfaceStability;
 import org.apache.hadoop.hbase.exceptions.DeserializationException;
 import org.apache.hadoop.hbase.filter.Filter;
+import org.apache.hadoop.hbase.io.TimeRange;
 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
 import org.apache.hadoop.hbase.security.access.AccessControlConstants;
 import org.apache.hadoop.hbase.security.access.Permission;
@@ -31,6 +33,7 @@ import org.apache.hadoop.hbase.security.visibility.VisibilityConstants;
 
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ListMultimap;
+import org.apache.hadoop.hbase.util.Bytes;
 
 @InterfaceAudience.Public
 @InterfaceStability.Evolving
@@ -39,6 +42,7 @@ public abstract class Query extends OperationWithAttributes {
   protected Filter filter = null;
   protected int targetReplicaId = -1;
   protected Consistency consistency = Consistency.STRONG;
+  protected Map<byte[], TimeRange> colFamTimeRangeMap = Maps.newTreeMap(Bytes.BYTES_COMPARATOR);
 
   /**
    * @return Filter
@@ -173,4 +177,32 @@ public abstract class Query extends OperationWithAttributes {
     return attr == null ? IsolationLevel.READ_COMMITTED :
                           IsolationLevel.fromBytes(attr);
   }
+
+
+  /**
+   * Get versions of columns only within the specified timestamp range,
+   * [minStamp, maxStamp) on a per CF bases.  Note, default maximum versions to return is 1.  If
+   * your time range spans more than one version and you want all versions
+   * returned, up the number of versions beyond the default.
+   * Column Family time ranges take precedence over the global time range.
+   *
+   * @param cf       the column family for which you want to restrict
+   * @param minStamp minimum timestamp value, inclusive
+   * @param maxStamp maximum timestamp value, exclusive
+   * @return this
+   */
+
+  public Query setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp) {
+    colFamTimeRangeMap.put(cf, new TimeRange(minStamp, maxStamp));
+    return this;
+  }
+
+  /**
+   * @return Map<byte[], TimeRange> a map of column families to time ranges
+   */
+  public Map<byte[], TimeRange> getColumnFamilyTimeRange() {
+    return this.colFamTimeRangeMap;
+  }
+
+
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/290ecbe8/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Scan.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Scan.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Scan.java
index 3e68158..fe9745e 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Scan.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Scan.java
@@ -248,6 +248,10 @@ public class Scan extends Query {
     for (Map.Entry<String, byte[]> attr : scan.getAttributesMap().entrySet()) {
       setAttribute(attr.getKey(), attr.getValue());
     }
+    for (Map.Entry<byte[], TimeRange> entry : scan.getColumnFamilyTimeRange().entrySet()) {
+      TimeRange tr = entry.getValue();
+      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());
+    }
   }
 
   /**
@@ -270,6 +274,10 @@ public class Scan extends Query {
     for (Map.Entry<String, byte[]> attr : get.getAttributesMap().entrySet()) {
       setAttribute(attr.getKey(), attr.getValue());
     }
+    for (Map.Entry<byte[], TimeRange> entry : get.getColumnFamilyTimeRange().entrySet()) {
+      TimeRange tr = entry.getValue();
+      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());
+    }
   }
 
   public boolean isGetScan() {
@@ -321,13 +329,11 @@ public class Scan extends Query {
    * returned, up the number of versions beyond the default.
    * @param minStamp minimum timestamp value, inclusive
    * @param maxStamp maximum timestamp value, exclusive
-   * @throws IOException if invalid time range
    * @see #setMaxVersions()
    * @see #setMaxVersions(int)
    * @return this
    */
-  public Scan setTimeRange(long minStamp, long maxStamp)
-  throws IOException {
+  public Scan setTimeRange(long minStamp, long maxStamp) throws IOException {
     tr = new TimeRange(minStamp, maxStamp);
     return this;
   }
@@ -346,7 +352,7 @@ public class Scan extends Query {
   throws IOException {
     try {
       tr = new TimeRange(timestamp, timestamp+1);
-    } catch(IOException e) {
+    } catch(Exception e) {
       // This should never happen, unless integer overflow or something extremely wrong...
       LOG.error("TimeRange failed, likely caused by integer overflow. ", e);
       throw e;
@@ -354,6 +360,10 @@ public class Scan extends Query {
     return this;
   }
 
+  @Override public Scan setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp) {
+    return (Scan) super.setColumnFamilyTimeRange(cf, minStamp, maxStamp);
+  }
+
   /**
    * Set the start row of the scan.
    * <p>

http://git-wip-us.apache.org/repos/asf/hbase/blob/290ecbe8/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java
index 0d9c73b..dd42fd5 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java
@@ -458,17 +458,16 @@ public final class ProtobufUtil {
     if (proto.hasStoreOffset()) {
       get.setRowOffsetPerColumnFamily(proto.getStoreOffset());
     }
-    if (proto.hasTimeRange()) {
-      HBaseProtos.TimeRange timeRange = proto.getTimeRange();
-      long minStamp = 0;
-      long maxStamp = Long.MAX_VALUE;
-      if (timeRange.hasFrom()) {
-        minStamp = timeRange.getFrom();
+    if (proto.getCfTimeRangeCount() > 0) {
+      for (HBaseProtos.ColumnFamilyTimeRange cftr : proto.getCfTimeRangeList()) {
+        TimeRange timeRange = protoToTimeRange(cftr.getTimeRange());
+        get.setColumnFamilyTimeRange(cftr.getColumnFamily().toByteArray(),
+            timeRange.getMin(), timeRange.getMax());
       }
-      if (timeRange.hasTo()) {
-        maxStamp = timeRange.getTo();
-      }
-      get.setTimeRange(minStamp, maxStamp);
+    }
+    if (proto.hasTimeRange()) {
+      TimeRange timeRange = protoToTimeRange(proto.getTimeRange());
+      get.setTimeRange(timeRange.getMin(), timeRange.getMax());
     }
     if (proto.hasFilter()) {
       FilterProtos.Filter filter = proto.getFilter();
@@ -829,16 +828,8 @@ public final class ProtobufUtil {
       }
     }
     if (proto.hasTimeRange()) {
-      HBaseProtos.TimeRange timeRange = proto.getTimeRange();
-      long minStamp = 0;
-      long maxStamp = Long.MAX_VALUE;
-      if (timeRange.hasFrom()) {
-        minStamp = timeRange.getFrom();
-      }
-      if (timeRange.hasTo()) {
-        maxStamp = timeRange.getTo();
-      }
-      increment.setTimeRange(minStamp, maxStamp);
+      TimeRange timeRange = protoToTimeRange(proto.getTimeRange());
+      increment.setTimeRange(timeRange.getMin(), timeRange.getMax());
     }
     increment.setDurability(toDurability(proto.getDurability()));
     for (NameBytesPair attribute : proto.getAttributeList()) {
@@ -876,6 +867,12 @@ public final class ProtobufUtil {
       scanBuilder.setLoadColumnFamiliesOnDemand(loadColumnFamiliesOnDemand.booleanValue());
     }
     scanBuilder.setMaxVersions(scan.getMaxVersions());
+    for (Entry<byte[], TimeRange> cftr : scan.getColumnFamilyTimeRange().entrySet()) {
+      HBaseProtos.ColumnFamilyTimeRange.Builder b = HBaseProtos.ColumnFamilyTimeRange.newBuilder();
+      b.setColumnFamily(ByteString.copyFrom(cftr.getKey()));
+      b.setTimeRange(timeRangeToProto(cftr.getValue()));
+      scanBuilder.addCfTimeRange(b);
+    }
     TimeRange timeRange = scan.getTimeRange();
     if (!timeRange.isAllTime()) {
       HBaseProtos.TimeRange.Builder timeRangeBuilder =
@@ -970,17 +967,16 @@ public final class ProtobufUtil {
     if (proto.hasLoadColumnFamiliesOnDemand()) {
       scan.setLoadColumnFamiliesOnDemand(proto.getLoadColumnFamiliesOnDemand());
     }
-    if (proto.hasTimeRange()) {
-      HBaseProtos.TimeRange timeRange = proto.getTimeRange();
-      long minStamp = 0;
-      long maxStamp = Long.MAX_VALUE;
-      if (timeRange.hasFrom()) {
-        minStamp = timeRange.getFrom();
-      }
-      if (timeRange.hasTo()) {
-        maxStamp = timeRange.getTo();
+    if (proto.getCfTimeRangeCount() > 0) {
+      for (HBaseProtos.ColumnFamilyTimeRange cftr : proto.getCfTimeRangeList()) {
+        TimeRange timeRange = protoToTimeRange(cftr.getTimeRange());
+        scan.setColumnFamilyTimeRange(cftr.getColumnFamily().toByteArray(),
+            timeRange.getMin(), timeRange.getMax());
       }
-      scan.setTimeRange(minStamp, maxStamp);
+    }
+    if (proto.hasTimeRange()) {
+      TimeRange timeRange = protoToTimeRange(proto.getTimeRange());
+      scan.setTimeRange(timeRange.getMin(), timeRange.getMax());
     }
     if (proto.hasFilter()) {
       FilterProtos.Filter filter = proto.getFilter();
@@ -1042,6 +1038,12 @@ public final class ProtobufUtil {
     if (get.getFilter() != null) {
       builder.setFilter(ProtobufUtil.toFilter(get.getFilter()));
     }
+    for (Entry<byte[], TimeRange> cftr : get.getColumnFamilyTimeRange().entrySet()) {
+      HBaseProtos.ColumnFamilyTimeRange.Builder b = HBaseProtos.ColumnFamilyTimeRange.newBuilder();
+      b.setColumnFamily(ByteString.copyFrom(cftr.getKey()));
+      b.setTimeRange(timeRangeToProto(cftr.getValue()));
+      builder.addCfTimeRange(b);
+    }
     TimeRange timeRange = get.getTimeRange();
     if (!timeRange.isAllTime()) {
       HBaseProtos.TimeRange.Builder timeRangeBuilder =
@@ -3162,4 +3164,25 @@ public final class ProtobufUtil {
     }
     return scList;
   }
+
+  private static HBaseProtos.TimeRange.Builder timeRangeToProto(TimeRange timeRange) {
+    HBaseProtos.TimeRange.Builder timeRangeBuilder =
+        HBaseProtos.TimeRange.newBuilder();
+    timeRangeBuilder.setFrom(timeRange.getMin());
+    timeRangeBuilder.setTo(timeRange.getMax());
+    return timeRangeBuilder;
+  }
+
+  private static TimeRange protoToTimeRange(HBaseProtos.TimeRange timeRange) throws IOException {
+      long minStamp = 0;
+      long maxStamp = Long.MAX_VALUE;
+      if (timeRange.hasFrom()) {
+        minStamp = timeRange.getFrom();
+      }
+      if (timeRange.hasTo()) {
+        maxStamp = timeRange.getTo();
+      }
+    return new TimeRange(minStamp, maxStamp);
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/290ecbe8/hbase-common/src/main/java/org/apache/hadoop/hbase/io/TimeRange.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/TimeRange.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/TimeRange.java
index ad1c984..a300c21 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/TimeRange.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/TimeRange.java
@@ -68,16 +68,15 @@ public class TimeRange {
    * Represents interval [minStamp, maxStamp)
    * @param minStamp the minimum timestamp, inclusive
    * @param maxStamp the maximum timestamp, exclusive
-   * @throws IOException
+   * @throws IllegalArgumentException
    */
-  public TimeRange(long minStamp, long maxStamp)
-  throws IOException {
+  public TimeRange(long minStamp, long maxStamp) {
     if (minStamp < 0 || maxStamp < 0) {
       throw new IllegalArgumentException("Timestamp cannot be negative. minStamp:" + minStamp
         + ", maxStamp:" + maxStamp);
     }
     if(maxStamp < minStamp) {
-      throw new IOException("maxStamp is smaller than minStamp");
+      throw new IllegalArgumentException("maxStamp is smaller than minStamp");
     }
     this.minStamp = minStamp;
     this.maxStamp = maxStamp;

http://git-wip-us.apache.org/repos/asf/hbase/blob/290ecbe8/hbase-protocol/src/main/java/org/apache/hadoop/hbase/protobuf/generated/ClientProtos.java
----------------------------------------------------------------------
diff --git a/hbase-protocol/src/main/java/org/apache/hadoop/hbase/protobuf/generated/ClientProtos.java b/hbase-protocol/src/main/java/org/apache/hadoop/hbase/protobuf/generated/ClientProtos.java
index ecc5ebd..5e17ad5 100644
--- a/hbase-protocol/src/main/java/org/apache/hadoop/hbase/protobuf/generated/ClientProtos.java
+++ b/hbase-protocol/src/main/java/org/apache/hadoop/hbase/protobuf/generated/ClientProtos.java
@@ -1935,6 +1935,31 @@ public final class ClientProtos {
      * <code>optional .hbase.pb.Consistency consistency = 12 [default = STRONG];</code>
      */
     org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency getConsistency();
+
+    // repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+     */
+    java.util.List<org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange> 
+        getCfTimeRangeList();
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+     */
+    org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange getCfTimeRange(int index);
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+     */
+    int getCfTimeRangeCount();
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+     */
+    java.util.List<? extends org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRangeOrBuilder> 
+        getCfTimeRangeOrBuilderList();
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+     */
+    org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRangeOrBuilder getCfTimeRangeOrBuilder(
+        int index);
   }
   /**
    * Protobuf type {@code hbase.pb.Get}
@@ -2077,6 +2102,14 @@ public final class ClientProtos {
               }
               break;
             }
+            case 106: {
+              if (!((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
+                cfTimeRange_ = new java.util.ArrayList<org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange>();
+                mutable_bitField0_ |= 0x00000800;
+              }
+              cfTimeRange_.add(input.readMessage(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.PARSER, extensionRegistry));
+              break;
+            }
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
@@ -2091,6 +2124,9 @@ public final class ClientProtos {
         if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
           attribute_ = java.util.Collections.unmodifiableList(attribute_);
         }
+        if (((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
+          cfTimeRange_ = java.util.Collections.unmodifiableList(cfTimeRange_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
@@ -2361,6 +2397,42 @@ public final class ClientProtos {
       return consistency_;
     }
 
+    // repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;
+    public static final int CF_TIME_RANGE_FIELD_NUMBER = 13;
+    private java.util.List<org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange> cfTimeRange_;
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+     */
+    public java.util.List<org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange> getCfTimeRangeList() {
+      return cfTimeRange_;
+    }
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+     */
+    public java.util.List<? extends org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRangeOrBuilder> 
+        getCfTimeRangeOrBuilderList() {
+      return cfTimeRange_;
+    }
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+     */
+    public int getCfTimeRangeCount() {
+      return cfTimeRange_.size();
+    }
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+     */
+    public org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange getCfTimeRange(int index) {
+      return cfTimeRange_.get(index);
+    }
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+     */
+    public org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRangeOrBuilder getCfTimeRangeOrBuilder(
+        int index) {
+      return cfTimeRange_.get(index);
+    }
+
     private void initFields() {
       row_ = com.google.protobuf.ByteString.EMPTY;
       column_ = java.util.Collections.emptyList();
@@ -2373,6 +2445,7 @@ public final class ClientProtos {
       storeOffset_ = 0;
       existenceOnly_ = false;
       consistency_ = org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency.STRONG;
+      cfTimeRange_ = java.util.Collections.emptyList();
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -2401,6 +2474,12 @@ public final class ClientProtos {
           return false;
         }
       }
+      for (int i = 0; i < getCfTimeRangeCount(); i++) {
+        if (!getCfTimeRange(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
       memoizedIsInitialized = 1;
       return true;
     }
@@ -2441,6 +2520,9 @@ public final class ClientProtos {
       if (((bitField0_ & 0x00000100) == 0x00000100)) {
         output.writeEnum(12, consistency_.getNumber());
       }
+      for (int i = 0; i < cfTimeRange_.size(); i++) {
+        output.writeMessage(13, cfTimeRange_.get(i));
+      }
       getUnknownFields().writeTo(output);
     }
 
@@ -2494,6 +2576,10 @@ public final class ClientProtos {
         size += com.google.protobuf.CodedOutputStream
           .computeEnumSize(12, consistency_.getNumber());
       }
+      for (int i = 0; i < cfTimeRange_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(13, cfTimeRange_.get(i));
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -2566,6 +2652,8 @@ public final class ClientProtos {
         result = result &&
             (getConsistency() == other.getConsistency());
       }
+      result = result && getCfTimeRangeList()
+          .equals(other.getCfTimeRangeList());
       result = result &&
           getUnknownFields().equals(other.getUnknownFields());
       return result;
@@ -2623,6 +2711,10 @@ public final class ClientProtos {
         hash = (37 * hash) + CONSISTENCY_FIELD_NUMBER;
         hash = (53 * hash) + hashEnum(getConsistency());
       }
+      if (getCfTimeRangeCount() > 0) {
+        hash = (37 * hash) + CF_TIME_RANGE_FIELD_NUMBER;
+        hash = (53 * hash) + getCfTimeRangeList().hashCode();
+      }
       hash = (29 * hash) + getUnknownFields().hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -2735,6 +2827,7 @@ public final class ClientProtos {
           getAttributeFieldBuilder();
           getFilterFieldBuilder();
           getTimeRangeFieldBuilder();
+          getCfTimeRangeFieldBuilder();
         }
       }
       private static Builder create() {
@@ -2781,6 +2874,12 @@ public final class ClientProtos {
         bitField0_ = (bitField0_ & ~0x00000200);
         consistency_ = org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency.STRONG;
         bitField0_ = (bitField0_ & ~0x00000400);
+        if (cfTimeRangeBuilder_ == null) {
+          cfTimeRange_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000800);
+        } else {
+          cfTimeRangeBuilder_.clear();
+        }
         return this;
       }
 
@@ -2871,6 +2970,15 @@ public final class ClientProtos {
           to_bitField0_ |= 0x00000100;
         }
         result.consistency_ = consistency_;
+        if (cfTimeRangeBuilder_ == null) {
+          if (((bitField0_ & 0x00000800) == 0x00000800)) {
+            cfTimeRange_ = java.util.Collections.unmodifiableList(cfTimeRange_);
+            bitField0_ = (bitField0_ & ~0x00000800);
+          }
+          result.cfTimeRange_ = cfTimeRange_;
+        } else {
+          result.cfTimeRange_ = cfTimeRangeBuilder_.build();
+        }
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -2966,6 +3074,32 @@ public final class ClientProtos {
         if (other.hasConsistency()) {
           setConsistency(other.getConsistency());
         }
+        if (cfTimeRangeBuilder_ == null) {
+          if (!other.cfTimeRange_.isEmpty()) {
+            if (cfTimeRange_.isEmpty()) {
+              cfTimeRange_ = other.cfTimeRange_;
+              bitField0_ = (bitField0_ & ~0x00000800);
+            } else {
+              ensureCfTimeRangeIsMutable();
+              cfTimeRange_.addAll(other.cfTimeRange_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.cfTimeRange_.isEmpty()) {
+            if (cfTimeRangeBuilder_.isEmpty()) {
+              cfTimeRangeBuilder_.dispose();
+              cfTimeRangeBuilder_ = null;
+              cfTimeRange_ = other.cfTimeRange_;
+              bitField0_ = (bitField0_ & ~0x00000800);
+              cfTimeRangeBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getCfTimeRangeFieldBuilder() : null;
+            } else {
+              cfTimeRangeBuilder_.addAllMessages(other.cfTimeRange_);
+            }
+          }
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -2993,6 +3127,12 @@ public final class ClientProtos {
             return false;
           }
         }
+        for (int i = 0; i < getCfTimeRangeCount(); i++) {
+          if (!getCfTimeRange(i).isInitialized()) {
+            
+            return false;
+          }
+        }
         return true;
       }
 
@@ -3986,6 +4126,246 @@ public final class ClientProtos {
         return this;
       }
 
+      // repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;
+      private java.util.List<org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange> cfTimeRange_ =
+        java.util.Collections.emptyList();
+      private void ensureCfTimeRangeIsMutable() {
+        if (!((bitField0_ & 0x00000800) == 0x00000800)) {
+          cfTimeRange_ = new java.util.ArrayList<org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange>(cfTimeRange_);
+          bitField0_ |= 0x00000800;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilder<
+          org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRangeOrBuilder> cfTimeRangeBuilder_;
+
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+       */
+      public java.util.List<org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange> getCfTimeRangeList() {
+        if (cfTimeRangeBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(cfTimeRange_);
+        } else {
+          return cfTimeRangeBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+       */
+      public int getCfTimeRangeCount() {
+        if (cfTimeRangeBuilder_ == null) {
+          return cfTimeRange_.size();
+        } else {
+          return cfTimeRangeBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+       */
+      public org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange getCfTimeRange(int index) {
+        if (cfTimeRangeBuilder_ == null) {
+          return cfTimeRange_.get(index);
+        } else {
+          return cfTimeRangeBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+       */
+      public Builder setCfTimeRange(
+          int index, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange value) {
+        if (cfTimeRangeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureCfTimeRangeIsMutable();
+          cfTimeRange_.set(index, value);
+          onChanged();
+        } else {
+          cfTimeRangeBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+       */
+      public Builder setCfTimeRange(
+          int index, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder builderForValue) {
+        if (cfTimeRangeBuilder_ == null) {
+          ensureCfTimeRangeIsMutable();
+          cfTimeRange_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          cfTimeRangeBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+       */
+      public Builder addCfTimeRange(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange value) {
+        if (cfTimeRangeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureCfTimeRangeIsMutable();
+          cfTimeRange_.add(value);
+          onChanged();
+        } else {
+          cfTimeRangeBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+       */
+      public Builder addCfTimeRange(
+          int index, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange value) {
+        if (cfTimeRangeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureCfTimeRangeIsMutable();
+          cfTimeRange_.add(index, value);
+          onChanged();
+        } else {
+          cfTimeRangeBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+       */
+      public Builder addCfTimeRange(
+          org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder builderForValue) {
+        if (cfTimeRangeBuilder_ == null) {
+          ensureCfTimeRangeIsMutable();
+          cfTimeRange_.add(builderForValue.build());
+          onChanged();
+        } else {
+          cfTimeRangeBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+       */
+      public Builder addCfTimeRange(
+          int index, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder builderForValue) {
+        if (cfTimeRangeBuilder_ == null) {
+          ensureCfTimeRangeIsMutable();
+          cfTimeRange_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          cfTimeRangeBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+       */
+      public Builder addAllCfTimeRange(
+          java.lang.Iterable<? extends org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange> values) {
+        if (cfTimeRangeBuilder_ == null) {
+          ensureCfTimeRangeIsMutable();
+          super.addAll(values, cfTimeRange_);
+          onChanged();
+        } else {
+          cfTimeRangeBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+       */
+      public Builder clearCfTimeRange() {
+        if (cfTimeRangeBuilder_ == null) {
+          cfTimeRange_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000800);
+          onChanged();
+        } else {
+          cfTimeRangeBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+       */
+      public Builder removeCfTimeRange(int index) {
+        if (cfTimeRangeBuilder_ == null) {
+          ensureCfTimeRangeIsMutable();
+          cfTimeRange_.remove(index);
+          onChanged();
+        } else {
+          cfTimeRangeBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+       */
+      public org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder getCfTimeRangeBuilder(
+          int index) {
+        return getCfTimeRangeFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+       */
+      public org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRangeOrBuilder getCfTimeRangeOrBuilder(
+          int index) {
+        if (cfTimeRangeBuilder_ == null) {
+          return cfTimeRange_.get(index);  } else {
+          return cfTimeRangeBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+       */
+      public java.util.List<? extends org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRangeOrBuilder> 
+           getCfTimeRangeOrBuilderList() {
+        if (cfTimeRangeBuilder_ != null) {
+          return cfTimeRangeBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(cfTimeRange_);
+        }
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+       */
+      public org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder addCfTimeRangeBuilder() {
+        return getCfTimeRangeFieldBuilder().addBuilder(
+            org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+       */
+      public org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder addCfTimeRangeBuilder(
+          int index) {
+        return getCfTimeRangeFieldBuilder().addBuilder(
+            index, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 13;</code>
+       */
+      public java.util.List<org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder> 
+           getCfTimeRangeBuilderList() {
+        return getCfTimeRangeFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRangeOrBuilder> 
+          getCfTimeRangeFieldBuilder() {
+        if (cfTimeRangeBuilder_ == null) {
+          cfTimeRangeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRangeOrBuilder>(
+                  cfTimeRange_,
+                  ((bitField0_ & 0x00000800) == 0x00000800),
+                  getParentForChildren(),
+                  isClean());
+          cfTimeRange_ = null;
+        }
+        return cfTimeRangeBuilder_;
+      }
+
       // @@protoc_insertion_point(builder_scope:hbase.pb.Get)
     }
 
@@ -13692,6 +14072,31 @@ public final class ClientProtos {
      * <code>optional bool allow_partial_results = 18;</code>
      */
     boolean getAllowPartialResults();
+
+    // repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+     */
+    java.util.List<org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange> 
+        getCfTimeRangeList();
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+     */
+    org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange getCfTimeRange(int index);
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+     */
+    int getCfTimeRangeCount();
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+     */
+    java.util.List<? extends org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRangeOrBuilder> 
+        getCfTimeRangeOrBuilderList();
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+     */
+    org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRangeOrBuilder getCfTimeRangeOrBuilder(
+        int index);
   }
   /**
    * Protobuf type {@code hbase.pb.Scan}
@@ -13873,6 +14278,14 @@ public final class ClientProtos {
               allowPartialResults_ = input.readBool();
               break;
             }
+            case 154: {
+              if (!((mutable_bitField0_ & 0x00040000) == 0x00040000)) {
+                cfTimeRange_ = new java.util.ArrayList<org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange>();
+                mutable_bitField0_ |= 0x00040000;
+              }
+              cfTimeRange_.add(input.readMessage(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.PARSER, extensionRegistry));
+              break;
+            }
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
@@ -13887,6 +14300,9 @@ public final class ClientProtos {
         if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
           attribute_ = java.util.Collections.unmodifiableList(attribute_);
         }
+        if (((mutable_bitField0_ & 0x00040000) == 0x00040000)) {
+          cfTimeRange_ = java.util.Collections.unmodifiableList(cfTimeRange_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
@@ -14267,6 +14683,42 @@ public final class ClientProtos {
       return allowPartialResults_;
     }
 
+    // repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;
+    public static final int CF_TIME_RANGE_FIELD_NUMBER = 19;
+    private java.util.List<org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange> cfTimeRange_;
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+     */
+    public java.util.List<org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange> getCfTimeRangeList() {
+      return cfTimeRange_;
+    }
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+     */
+    public java.util.List<? extends org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRangeOrBuilder> 
+        getCfTimeRangeOrBuilderList() {
+      return cfTimeRange_;
+    }
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+     */
+    public int getCfTimeRangeCount() {
+      return cfTimeRange_.size();
+    }
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+     */
+    public org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange getCfTimeRange(int index) {
+      return cfTimeRange_.get(index);
+    }
+    /**
+     * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+     */
+    public org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRangeOrBuilder getCfTimeRangeOrBuilder(
+        int index) {
+      return cfTimeRange_.get(index);
+    }
+
     private void initFields() {
       column_ = java.util.Collections.emptyList();
       attribute_ = java.util.Collections.emptyList();
@@ -14286,6 +14738,7 @@ public final class ClientProtos {
       consistency_ = org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency.STRONG;
       caching_ = 0;
       allowPartialResults_ = false;
+      cfTimeRange_ = java.util.Collections.emptyList();
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -14310,6 +14763,12 @@ public final class ClientProtos {
           return false;
         }
       }
+      for (int i = 0; i < getCfTimeRangeCount(); i++) {
+        if (!getCfTimeRange(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
       memoizedIsInitialized = 1;
       return true;
     }
@@ -14371,6 +14830,9 @@ public final class ClientProtos {
       if (((bitField0_ & 0x00008000) == 0x00008000)) {
         output.writeBool(18, allowPartialResults_);
       }
+      for (int i = 0; i < cfTimeRange_.size(); i++) {
+        output.writeMessage(19, cfTimeRange_.get(i));
+      }
       getUnknownFields().writeTo(output);
     }
 
@@ -14452,6 +14914,10 @@ public final class ClientProtos {
         size += com.google.protobuf.CodedOutputStream
           .computeBoolSize(18, allowPartialResults_);
       }
+      for (int i = 0; i < cfTimeRange_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(19, cfTimeRange_.get(i));
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -14559,6 +15025,8 @@ public final class ClientProtos {
         result = result && (getAllowPartialResults()
             == other.getAllowPartialResults());
       }
+      result = result && getCfTimeRangeList()
+          .equals(other.getCfTimeRangeList());
       result = result &&
           getUnknownFields().equals(other.getUnknownFields());
       return result;
@@ -14644,6 +15112,10 @@ public final class ClientProtos {
         hash = (37 * hash) + ALLOW_PARTIAL_RESULTS_FIELD_NUMBER;
         hash = (53 * hash) + hashBoolean(getAllowPartialResults());
       }
+      if (getCfTimeRangeCount() > 0) {
+        hash = (37 * hash) + CF_TIME_RANGE_FIELD_NUMBER;
+        hash = (53 * hash) + getCfTimeRangeList().hashCode();
+      }
       hash = (29 * hash) + getUnknownFields().hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -14760,6 +15232,7 @@ public final class ClientProtos {
           getAttributeFieldBuilder();
           getFilterFieldBuilder();
           getTimeRangeFieldBuilder();
+          getCfTimeRangeFieldBuilder();
         }
       }
       private static Builder create() {
@@ -14820,6 +15293,12 @@ public final class ClientProtos {
         bitField0_ = (bitField0_ & ~0x00010000);
         allowPartialResults_ = false;
         bitField0_ = (bitField0_ & ~0x00020000);
+        if (cfTimeRangeBuilder_ == null) {
+          cfTimeRange_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00040000);
+        } else {
+          cfTimeRangeBuilder_.clear();
+        }
         return this;
       }
 
@@ -14938,6 +15417,15 @@ public final class ClientProtos {
           to_bitField0_ |= 0x00008000;
         }
         result.allowPartialResults_ = allowPartialResults_;
+        if (cfTimeRangeBuilder_ == null) {
+          if (((bitField0_ & 0x00040000) == 0x00040000)) {
+            cfTimeRange_ = java.util.Collections.unmodifiableList(cfTimeRange_);
+            bitField0_ = (bitField0_ & ~0x00040000);
+          }
+          result.cfTimeRange_ = cfTimeRange_;
+        } else {
+          result.cfTimeRange_ = cfTimeRangeBuilder_.build();
+        }
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -15054,6 +15542,32 @@ public final class ClientProtos {
         if (other.hasAllowPartialResults()) {
           setAllowPartialResults(other.getAllowPartialResults());
         }
+        if (cfTimeRangeBuilder_ == null) {
+          if (!other.cfTimeRange_.isEmpty()) {
+            if (cfTimeRange_.isEmpty()) {
+              cfTimeRange_ = other.cfTimeRange_;
+              bitField0_ = (bitField0_ & ~0x00040000);
+            } else {
+              ensureCfTimeRangeIsMutable();
+              cfTimeRange_.addAll(other.cfTimeRange_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.cfTimeRange_.isEmpty()) {
+            if (cfTimeRangeBuilder_.isEmpty()) {
+              cfTimeRangeBuilder_.dispose();
+              cfTimeRangeBuilder_ = null;
+              cfTimeRange_ = other.cfTimeRange_;
+              bitField0_ = (bitField0_ & ~0x00040000);
+              cfTimeRangeBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getCfTimeRangeFieldBuilder() : null;
+            } else {
+              cfTimeRangeBuilder_.addAllMessages(other.cfTimeRange_);
+            }
+          }
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -15077,6 +15591,12 @@ public final class ClientProtos {
             return false;
           }
         }
+        for (int i = 0; i < getCfTimeRangeCount(); i++) {
+          if (!getCfTimeRange(i).isInitialized()) {
+            
+            return false;
+          }
+        }
         return true;
       }
 
@@ -16300,6 +16820,246 @@ public final class ClientProtos {
         return this;
       }
 
+      // repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;
+      private java.util.List<org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange> cfTimeRange_ =
+        java.util.Collections.emptyList();
+      private void ensureCfTimeRangeIsMutable() {
+        if (!((bitField0_ & 0x00040000) == 0x00040000)) {
+          cfTimeRange_ = new java.util.ArrayList<org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange>(cfTimeRange_);
+          bitField0_ |= 0x00040000;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilder<
+          org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRangeOrBuilder> cfTimeRangeBuilder_;
+
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+       */
+      public java.util.List<org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange> getCfTimeRangeList() {
+        if (cfTimeRangeBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(cfTimeRange_);
+        } else {
+          return cfTimeRangeBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+       */
+      public int getCfTimeRangeCount() {
+        if (cfTimeRangeBuilder_ == null) {
+          return cfTimeRange_.size();
+        } else {
+          return cfTimeRangeBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+       */
+      public org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange getCfTimeRange(int index) {
+        if (cfTimeRangeBuilder_ == null) {
+          return cfTimeRange_.get(index);
+        } else {
+          return cfTimeRangeBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+       */
+      public Builder setCfTimeRange(
+          int index, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange value) {
+        if (cfTimeRangeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureCfTimeRangeIsMutable();
+          cfTimeRange_.set(index, value);
+          onChanged();
+        } else {
+          cfTimeRangeBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+       */
+      public Builder setCfTimeRange(
+          int index, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder builderForValue) {
+        if (cfTimeRangeBuilder_ == null) {
+          ensureCfTimeRangeIsMutable();
+          cfTimeRange_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          cfTimeRangeBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+       */
+      public Builder addCfTimeRange(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange value) {
+        if (cfTimeRangeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureCfTimeRangeIsMutable();
+          cfTimeRange_.add(value);
+          onChanged();
+        } else {
+          cfTimeRangeBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+       */
+      public Builder addCfTimeRange(
+          int index, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange value) {
+        if (cfTimeRangeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureCfTimeRangeIsMutable();
+          cfTimeRange_.add(index, value);
+          onChanged();
+        } else {
+          cfTimeRangeBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+       */
+      public Builder addCfTimeRange(
+          org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder builderForValue) {
+        if (cfTimeRangeBuilder_ == null) {
+          ensureCfTimeRangeIsMutable();
+          cfTimeRange_.add(builderForValue.build());
+          onChanged();
+        } else {
+          cfTimeRangeBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+       */
+      public Builder addCfTimeRange(
+          int index, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder builderForValue) {
+        if (cfTimeRangeBuilder_ == null) {
+          ensureCfTimeRangeIsMutable();
+          cfTimeRange_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          cfTimeRangeBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+       */
+      public Builder addAllCfTimeRange(
+          java.lang.Iterable<? extends org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange> values) {
+        if (cfTimeRangeBuilder_ == null) {
+          ensureCfTimeRangeIsMutable();
+          super.addAll(values, cfTimeRange_);
+          onChanged();
+        } else {
+          cfTimeRangeBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+       */
+      public Builder clearCfTimeRange() {
+        if (cfTimeRangeBuilder_ == null) {
+          cfTimeRange_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00040000);
+          onChanged();
+        } else {
+          cfTimeRangeBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+       */
+      public Builder removeCfTimeRange(int index) {
+        if (cfTimeRangeBuilder_ == null) {
+          ensureCfTimeRangeIsMutable();
+          cfTimeRange_.remove(index);
+          onChanged();
+        } else {
+          cfTimeRangeBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+       */
+      public org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder getCfTimeRangeBuilder(
+          int index) {
+        return getCfTimeRangeFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+       */
+      public org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRangeOrBuilder getCfTimeRangeOrBuilder(
+          int index) {
+        if (cfTimeRangeBuilder_ == null) {
+          return cfTimeRange_.get(index);  } else {
+          return cfTimeRangeBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+       */
+      public java.util.List<? extends org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRangeOrBuilder> 
+           getCfTimeRangeOrBuilderList() {
+        if (cfTimeRangeBuilder_ != null) {
+          return cfTimeRangeBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(cfTimeRange_);
+        }
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+       */
+      public org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder addCfTimeRangeBuilder() {
+        return getCfTimeRangeFieldBuilder().addBuilder(
+            org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+       */
+      public org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder addCfTimeRangeBuilder(
+          int index) {
+        return getCfTimeRangeFieldBuilder().addBuilder(
+            index, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .hbase.pb.ColumnFamilyTimeRange cf_time_range = 19;</code>
+       */
+      public java.util.List<org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder> 
+           getCfTimeRangeBuilderList() {
+        return getCfTimeRangeFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRangeOrBuilder> 
+          getCfTimeRangeFieldBuilder() {
+        if (cfTimeRangeBuilder_ == null) {
+          cfTimeRangeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRange.Builder, org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ColumnFamilyTimeRangeOrBuilder>(
+                  cfTimeRange_,
+                  ((bitField0_ & 0x00040000) == 0x00040000),
+                  getParentForChildren(),
+                  isClean());
+          cfTimeRange_ = null;
+        }
+        return cfTimeRangeBuilder_;
+      }
+
       // @@protoc_insertion_point(builder_scope:hbase.pb.Scan)
     }
 
@@ -33333,7 +34093,7 @@ public final class ClientProtos {
       "o\032\017MapReduce.proto\"\037\n\016Authorizations\022\r\n\005" +
       "label\030\001 \003(\t\"$\n\016CellVisibility\022\022\n\nexpress" +
       "ion\030\001 \002(\t\"+\n\006Column\022\016\n\006family\030\001 \002(\014\022\021\n\tq" +
-      "ualifier\030\002 \003(\014\"\336\002\n\003Get\022\013\n\003row\030\001 \002(\014\022 \n\006c" +
+      "ualifier\030\002 \003(\014\"\226\003\n\003Get\022\013\n\003row\030\001 \002(\014\022 \n\006c" +
       "olumn\030\002 \003(\0132\020.hbase.pb.Column\022*\n\tattribu" +
       "te\030\003 \003(\0132\027.hbase.pb.NameBytesPair\022 \n\006fil" +
       "ter\030\004 \001(\0132\020.hbase.pb.Filter\022\'\n\ntime_rang" +
@@ -33342,127 +34102,130 @@ public final class ClientProtos {
       "e\022\023\n\013store_limit\030\010 \001(\r\022\024\n\014store_offset\030\t" +
       " \001(\r\022\035\n\016existence_only\030\n \001(\010:\005false\0222\n\013c" +
       "onsistency\030\014 \001(\0162\025.hbase.pb.Consistency:" +
-      "\006STRONG\"\203\001\n\006Result\022\034\n\004cell\030\001 \003(\0132\016.hbase" +
-      ".pb.Cell\022\035\n\025associated_cell_count\030\002 \001(\005\022" +
-      "\016\n\006exists\030\003 \001(\010\022\024\n\005stale\030\004 \001(\010:\005false\022\026\n" +
-      "\007partial\030\005 \001(\010:\005false\"S\n\nGetRequest\022)\n\006r" +
-      "egion\030\001 \002(\0132\031.hbase.pb.RegionSpecifier\022\032" +
-      "\n\003get\030\002 \002(\0132\r.hbase.pb.Get\"/\n\013GetRespons",
-      "e\022 \n\006result\030\001 \001(\0132\020.hbase.pb.Result\"\222\001\n\t" +
-      "Condition\022\013\n\003row\030\001 \002(\014\022\016\n\006family\030\002 \002(\014\022\021" +
-      "\n\tqualifier\030\003 \002(\014\022+\n\014compare_type\030\004 \002(\0162" +
-      "\025.hbase.pb.CompareType\022(\n\ncomparator\030\005 \002" +
-      "(\0132\024.hbase.pb.Comparator\"\364\006\n\rMutationPro" +
-      "to\022\013\n\003row\030\001 \001(\014\0229\n\013mutate_type\030\002 \001(\0162$.h" +
-      "base.pb.MutationProto.MutationType\0229\n\014co" +
-      "lumn_value\030\003 \003(\0132#.hbase.pb.MutationProt" +
-      "o.ColumnValue\022\021\n\ttimestamp\030\004 \001(\004\022*\n\tattr" +
-      "ibute\030\005 \003(\0132\027.hbase.pb.NameBytesPair\022C\n\n",
-      "durability\030\006 \001(\0162\".hbase.pb.MutationProt" +
-      "o.Durability:\013USE_DEFAULT\022\'\n\ntime_range\030" +
-      "\007 \001(\0132\023.hbase.pb.TimeRange\022\035\n\025associated" +
-      "_cell_count\030\010 \001(\005\022\r\n\005nonce\030\t \001(\004\032\371\001\n\013Col" +
-      "umnValue\022\016\n\006family\030\001 \002(\014\022K\n\017qualifier_va" +
-      "lue\030\002 \003(\01322.hbase.pb.MutationProto.Colum" +
-      "nValue.QualifierValue\032\214\001\n\016QualifierValue" +
-      "\022\021\n\tqualifier\030\001 \001(\014\022\r\n\005value\030\002 \001(\014\022\021\n\tti" +
-      "mestamp\030\003 \001(\004\0227\n\013delete_type\030\004 \001(\0162\".hba" +
-      "se.pb.MutationProto.DeleteType\022\014\n\004tags\030\005",
-      " \001(\014\"W\n\nDurability\022\017\n\013USE_DEFAULT\020\000\022\014\n\010S" +
-      "KIP_WAL\020\001\022\r\n\tASYNC_WAL\020\002\022\014\n\010SYNC_WAL\020\003\022\r" +
-      "\n\tFSYNC_WAL\020\004\">\n\014MutationType\022\n\n\006APPEND\020" +
-      "\000\022\r\n\tINCREMENT\020\001\022\007\n\003PUT\020\002\022\n\n\006DELETE\020\003\"p\n" +
-      "\nDeleteType\022\026\n\022DELETE_ONE_VERSION\020\000\022\034\n\030D" +
-      "ELETE_MULTIPLE_VERSIONS\020\001\022\021\n\rDELETE_FAMI" +
-      "LY\020\002\022\031\n\025DELETE_FAMILY_VERSION\020\003\"\242\001\n\rMuta" +
-      "teRequest\022)\n\006region\030\001 \002(\0132\031.hbase.pb.Reg" +
-      "ionSpecifier\022)\n\010mutation\030\002 \002(\0132\027.hbase.p" +
-      "b.MutationProto\022&\n\tcondition\030\003 \001(\0132\023.hba",
-      "se.pb.Condition\022\023\n\013nonce_group\030\004 \001(\004\"E\n\016" +
-      "MutateResponse\022 \n\006result\030\001 \001(\0132\020.hbase.p" +
-      "b.Result\022\021\n\tprocessed\030\002 \001(\010\"\205\004\n\004Scan\022 \n\006" +
-      "column\030\001 \003(\0132\020.hbase.pb.Column\022*\n\tattrib" +
-      "ute\030\002 \003(\0132\027.hbase.pb.NameBytesPair\022\021\n\tst" +
-      "art_row\030\003 \001(\014\022\020\n\010stop_row\030\004 \001(\014\022 \n\006filte" +
-      "r\030\005 \001(\0132\020.hbase.pb.Filter\022\'\n\ntime_range\030" +
-      "\006 \001(\0132\023.hbase.pb.TimeRange\022\027\n\014max_versio" +
-      "ns\030\007 \001(\r:\0011\022\032\n\014cache_blocks\030\010 \001(\010:\004true\022" +
-      "\022\n\nbatch_size\030\t \001(\r\022\027\n\017max_result_size\030\n",
-      " \001(\004\022\023\n\013store_limit\030\013 \001(\r\022\024\n\014store_offse" +
-      "t\030\014 \001(\r\022&\n\036load_column_families_on_deman" +
-      "d\030\r \001(\010\022\r\n\005small\030\016 \001(\010\022\027\n\010reversed\030\017 \001(\010" +
-      ":\005false\0222\n\013consistency\030\020 \001(\0162\025.hbase.pb." +
-      "Consistency:\006STRONG\022\017\n\007caching\030\021 \001(\r\022\035\n\025" +
-      "allow_partial_results\030\022 \001(\010\"\220\002\n\013ScanRequ" +
-      "est\022)\n\006region\030\001 \001(\0132\031.hbase.pb.RegionSpe" +
-      "cifier\022\034\n\004scan\030\002 \001(\0132\016.hbase.pb.Scan\022\022\n\n" +
-      "scanner_id\030\003 \001(\004\022\026\n\016number_of_rows\030\004 \001(\r" +
-      "\022\025\n\rclose_scanner\030\005 \001(\010\022\025\n\rnext_call_seq",
-      "\030\006 \001(\004\022\037\n\027client_handles_partials\030\007 \001(\010\022" +
-      "!\n\031client_handles_heartbeats\030\010 \001(\010\022\032\n\022tr" +
-      "ack_scan_metrics\030\t \001(\010\"\232\002\n\014ScanResponse\022" +
-      "\030\n\020cells_per_result\030\001 \003(\r\022\022\n\nscanner_id\030" +
-      "\002 \001(\004\022\024\n\014more_results\030\003 \001(\010\022\013\n\003ttl\030\004 \001(\r" +
-      "\022!\n\007results\030\005 \003(\0132\020.hbase.pb.Result\022\r\n\005s" +
-      "tale\030\006 \001(\010\022\037\n\027partial_flag_per_result\030\007 " +
-      "\003(\010\022\036\n\026more_results_in_region\030\010 \001(\010\022\031\n\021h" +
-      "eartbeat_message\030\t \001(\010\022+\n\014scan_metrics\030\n" +
-      " \001(\0132\025.hbase.pb.ScanMetrics\"\305\001\n\024BulkLoad",
-      "HFileRequest\022)\n\006region\030\001 \002(\0132\031.hbase.pb." +
-      "RegionSpecifier\022>\n\013family_path\030\002 \003(\0132).h" +
-      "base.pb.BulkLoadHFileRequest.FamilyPath\022" +
-      "\026\n\016assign_seq_num\030\003 \001(\010\032*\n\nFamilyPath\022\016\n" +
-      "\006family\030\001 \002(\014\022\014\n\004path\030\002 \002(\t\"\'\n\025BulkLoadH" +
-      "FileResponse\022\016\n\006loaded\030\001 \002(\010\"a\n\026Coproces" +
-      "sorServiceCall\022\013\n\003row\030\001 \002(\014\022\024\n\014service_n" +
-      "ame\030\002 \002(\t\022\023\n\013method_name\030\003 \002(\t\022\017\n\007reques" +
-      "t\030\004 \002(\014\"B\n\030CoprocessorServiceResult\022&\n\005v" +
-      "alue\030\001 \001(\0132\027.hbase.pb.NameBytesPair\"v\n\031C",
-      "oprocessorServiceRequest\022)\n\006region\030\001 \002(\013" +
-      "2\031.hbase.pb.RegionSpecifier\022.\n\004call\030\002 \002(" +
-      "\0132 .hbase.pb.CoprocessorServiceCall\"o\n\032C" +
-      "oprocessorServiceResponse\022)\n\006region\030\001 \002(" +
-      "\0132\031.hbase.pb.RegionSpecifier\022&\n\005value\030\002 " +
-      "\002(\0132\027.hbase.pb.NameBytesPair\"\226\001\n\006Action\022" +
-      "\r\n\005index\030\001 \001(\r\022)\n\010mutation\030\002 \001(\0132\027.hbase" +
-      ".pb.MutationProto\022\032\n\003get\030\003 \001(\0132\r.hbase.p" +
-      "b.Get\0226\n\014service_call\030\004 \001(\0132 .hbase.pb.C" +
-      "oprocessorServiceCall\"k\n\014RegionAction\022)\n",
-      "\006region\030\001 \002(\0132\031.hbase.pb.RegionSpecifier" +
-      "\022\016\n\006atomic\030\002 \001(\010\022 \n\006action\030\003 \003(\0132\020.hbase" +
-      ".pb.Action\"c\n\017RegionLoadStats\022\027\n\014memstor" +
-      "eLoad\030\001 \001(\005:\0010\022\030\n\rheapOccupancy\030\002 \001(\005:\0010" +
-      "\022\035\n\022compactionPressure\030\003 \001(\005:\0010\"\332\001\n\021Resu" +
-      "ltOrException\022\r\n\005index\030\001 \001(\r\022 \n\006result\030\002" +
-      " \001(\0132\020.hbase.pb.Result\022*\n\texception\030\003 \001(" +
-      "\0132\027.hbase.pb.NameBytesPair\022:\n\016service_re" +
-      "sult\030\004 \001(\0132\".hbase.pb.CoprocessorService" +
-      "Result\022,\n\tloadStats\030\005 \001(\0132\031.hbase.pb.Reg",
-      "ionLoadStats\"x\n\022RegionActionResult\0226\n\021re" +
-      "sultOrException\030\001 \003(\0132\033.hbase.pb.ResultO" +
-      "rException\022*\n\texception\030\002 \001(\0132\027.hbase.pb" +
-      ".NameBytesPair\"x\n\014MultiRequest\022,\n\014region" +
-      "Action\030\001 \003(\0132\026.hbase.pb.RegionAction\022\022\n\n" +
-      "nonceGroup\030\002 \001(\004\022&\n\tcondition\030\003 \001(\0132\023.hb" +
-      "ase.pb.Condition\"\\\n\rMultiResponse\0228\n\022reg" +
-      "ionActionResult\030\001 \003(\0132\034.hbase.pb.RegionA" +
-      "ctionResult\022\021\n\tprocessed\030\002 \001(\010*\'\n\013Consis" +
-      "tency\022\n\n\006STRONG\020\000\022\014\n\010TIMELINE\020\0012\203\004\n\rClie",
-      "ntService\0222\n\003Get\022\024.hbase.pb.GetRequest\032\025" +
-      ".hbase.pb.GetResponse\022;\n\006Mutate\022\027.hbase." +
-      "pb.MutateRequest\032\030.hbase.pb.MutateRespon" +
-      "se\0225\n\004Scan\022\025.hbase.pb.ScanRequest\032\026.hbas" +
-      "e.pb.ScanResponse\022P\n\rBulkLoadHFile\022\036.hba" +
-      "se.pb.BulkLoadHFileRequest\032\037.hbase.pb.Bu" +
-      "lkLoadHFileResponse\022X\n\013ExecService\022#.hba" +
-      "se.pb.CoprocessorServiceRequest\032$.hbase." +
-      "pb.CoprocessorServiceResponse\022d\n\027ExecReg" +
-      "ionServerService\022#.hbase.pb.CoprocessorS",
-      "erviceRequest\032$.hbase.pb.CoprocessorServ" +
-      "iceResponse\0228\n\005Multi\022\026.hbase.pb.MultiReq" +
-      "uest\032\027.hbase.pb.MultiResponseBB\n*org.apa" +
-      "che.hadoop.hbase.protobuf.generatedB\014Cli" +
-      "entProtosH\001\210\001\001\240\001\001"
+      "\006STRONG\0226\n\rcf_time_range\030\r \003(\0132\037.hbase.p" +
+      "b.ColumnFamilyTimeRange\"\203\001\n\006Result\022\034\n\004ce" +
+      "ll\030\001 \003(\0132\016.hbase.pb.Cell\022\035\n\025associated_c" +
+      "ell_count\030\002 \001(\005\022\016\n\006exists\030\003 \001(\010\022\024\n\005stale" +
+      "\030\004 \001(\010:\005false\022\026\n\007partial\030\005 \001(\010:\005false\"S\n" +
+      "\nGetRequest\022)\n\006region\030\001 \002(\0132\031.hbase.pb.R",
+      "egionSpecifier\022\032\n\003get\030\002 \002(\0132\r.hbase.pb.G" +
+      "et\"/\n\013GetResponse\022 \n\006result\030\001 \001(\0132\020.hbas" +
+      "e.pb.Result\"\222\001\n\tCondition\022\013\n\003row\030\001 \002(\014\022\016" +
+      "\n\006family\030\002 \002(\014\022\021\n\tqualifier\030\003 \002(\014\022+\n\014com" +
+      "pare_type\030\004 \002(\0162\025.hbase.pb.CompareType\022(" +
+      "\n\ncomparator\030\005 \002(\0132\024.hbase.pb.Comparator" +
+      "\"\364\006\n\rMutationProto\022\013\n\003row\030\001 \001(\014\0229\n\013mutat" +
+      "e_type\030\002 \001(\0162$.hbase.pb.MutationProto.Mu" +
+      "tationType\0229\n\014column_value\030\003 \003(\0132#.hbase" +
+      ".pb.MutationProto.ColumnValue\022\021\n\ttimesta",
+      "mp\030\004 \001(\004\022*\n\tattribute\030\005 \003(\0132\027.hbase.pb.N" +
+      "ameBytesPair\022C\n\ndurability\030\006 \001(\0162\".hbase" +
+      ".pb.MutationProto.Durability:\013USE_DEFAUL" +
+      "T\022\'\n\ntime_range\030\007 \001(\0132\023.hbase.pb.TimeRan" +
+      "ge\022\035\n\025associated_cell_count\030\010 \001(\005\022\r\n\005non" +
+      "ce\030\t \001(\004\032\371\001\n\013ColumnValue\022\016\n\006family\030\001 \002(\014" +
+      "\022K\n\017qualifier_value\030\002 \003(\01322.hbase.pb.Mut" +
+      "ationProto.ColumnValue.QualifierValue\032\214\001" +
+      "\n\016QualifierValue\022\021\n\tqualifier\030\001 \001(\014\022\r\n\005v" +
+      "alue\030\002 \001(\014\022\021\n\ttimestamp\030\003 \001(\004\0227\n\013delete_",
+      "type\030\004 \001(\0162\".hbase.pb.MutationProto.Dele" +
+      "teType\022\014\n\004tags\030\005 \001(\014\"W\n\nDurability\022\017\n\013US" +
+      "E_DEFAULT\020\000\022\014\n\010SKIP_WAL\020\001\022\r\n\tASYNC_WAL\020\002" +
+      "\022\014\n\010SYNC_WAL\020\003\022\r\n\tFSYNC_WAL\020\004\">\n\014Mutatio" +
+      "nType\022\n\n\006APPEND\020\000\022\r\n\tINCREMENT\020\001\022\007\n\003PUT\020" +
+      "\002\022\n\n\006DELETE\020\003\"p\n\nDeleteType\022\026\n\022DELETE_ON" +
+      "E_VERSION\020\000\022\034\n\030DELETE_MULTIPLE_VERSIONS\020" +
+      "\001\022\021\n\rDELETE_FAMILY\020\002\022\031\n\025DELETE_FAMILY_VE" +
+      "RSION\020\003\"\242\001\n\rMutateRequest\022)\n\006region\030\001 \002(" +
+      "\0132\031.hbase.pb.RegionSpecifier\022)\n\010mutation",
+      "\030\002 \002(\0132\027.hbase.pb.MutationProto\022&\n\tcondi" +
+      "tion\030\003 \001(\0132\023.hbase.pb.Condition\022\023\n\013nonce" +
+      "_group\030\004 \001(\004\"E\n\016MutateResponse\022 \n\006result" +
+      "\030\001 \001(\0132\020.hbase.pb.Result\022\021\n\tprocessed\030\002 " +
+      "\001(\010\"\275\004\n\004Scan\022 \n\006column\030\001 \003(\0132\020.hbase.pb." +
+      "Column\022*\n\tattribute\030\002 \003(\0132\027.hbase.pb.Nam" +
+      "eBytesPair\022\021\n\tstart_row\030\003 \001(\014\022\020\n\010stop_ro" +
+      "w\030\004 \001(\014\022 \n\006filter\030\005 \001(\0132\020.hbase.pb.Filte" +
+      "r\022\'\n\ntime_range\030\006 \001(\0132\023.hbase.pb.TimeRan" +
+      "ge\022\027\n\014max_versions\030\007 \001(\r:\0011\022\032\n\014cache_blo",
+      "cks\030\010 \001(\010:\004true\022\022\n\nbatch_size\030\t \001(\r\022\027\n\017m" +
+      "ax_result_size\030\n \001(\004\022\023\n\013store_limit\030\013 \001(" +
+      "\r\022\024\n\014store_offset\030\014 \001(\r\022&\n\036load_column_f" +
+      "amilies_on_demand\030\r \001(\010\022\r\n\005small\030\016 \001(\010\022\027" +
+      "\n\010reversed\030\017 \001(\010:\005false\0222\n\013consistency\030\020" +
+      " \001(\0162\025.hbase.pb.Consistency:\006STRONG\022\017\n\007c" +
+      "aching\030\021 \001(\r\022\035\n\025allow_partial_results\030\022 " +
+      "\001(\010\0226\n\rcf_time_range\030\023 \003(\0132\037.hbase.pb.Co" +
+      "lumnFamilyTimeRange\"\220\002\n\013ScanRequest\022)\n\006r" +
+      "egion\030\001 \001(\0132\031.hbase.pb.RegionSpecifier\022\034",
+      "\n\004scan\030\002 \001(\0132\016.hbase.pb.Scan\022\022\n\nscanner_" +
+      "id\030\003 \001(\004\022\026\n\016number_of_rows\030\004 \001(\r\022\025\n\rclos" +
+      "e_scanner\030\005 \001(\010\022\025\n\rnext_call_seq\030\006 \001(\004\022\037" +
+      "\n\027client_handles_partials\030\007 \001(\010\022!\n\031clien" +
+      "t_handles_heartbeats\030\010 \001(\010\022\032\n\022track_scan" +
+      "_metrics\030\t \001(\010\"\232\002\n\014ScanResponse\022\030\n\020cells" +
+      "_per_result\030\001 \003(\r\022\022\n\nscanner_id\030\002 \001(\004\022\024\n" +
+      "\014more_results\030\003 \001(\010\022\013\n\003ttl\030\004 \001(\r\022!\n\007resu" +
+      "lts\030\005 \003(\0132\020.hbase.pb.Result\022\r\n\005stale\030\006 \001" +
+      "(\010\022\037\n\027partial_flag_per_result\030\007 \003(\010\022\036\n\026m",
+      "ore_results_in_region\030\010 \001(\010\022\031\n\021heartbeat" +
+      "_message\030\t \001(\010\022+\n\014scan_metrics\030\n \001(\0132\025.h" +
+      "base.pb.ScanMetrics\"\305\001\n\024BulkLoadHFileReq" +
+      "uest\022)\n\006region\030\001 \002(\0132\031.hbase.pb.RegionSp" +
+      "ecifier\022>\n\013family_path\030\002 \003(\0132).hbase.pb." +
+      "BulkLoadHFileRequest.FamilyPath\022\026\n\016assig" +
+      "n_seq_num\030\003 \001(\010\032*\n\nFamilyPath\022\016\n\006family\030" +
+      "\001 \002(\014\022\014\n\004path\030\002 \002(\t\"\'\n\025BulkLoadHFileResp" +
+      "onse\022\016\n\006loaded\030\001 \002(\010\"a\n\026CoprocessorServi" +
+      "ceCall\022\013\n\003row\030\001 \002(\014\022\024\n\014service_name\030\002 \002(",
+      "\t\022\023\n\013method_name\030\003 \002(\t\022\017\n\007request\030\004 \002(\014\"" +
+      "B\n\030CoprocessorServiceResult\022&\n\005value\030\001 \001" +
+      "(\0132\027.hbase.pb.NameBytesPair\"v\n\031Coprocess" +
+      "orServiceRequest\022)\n\006region\030\001 \002(\0132\031.hbase" +
+      ".pb.RegionSpecifier\022.\n\004call\030\002 \002(\0132 .hbas" +
+      "e.pb.CoprocessorServiceCall\"o\n\032Coprocess" +
+      "orServiceResponse\022)\n\006region\030\001 \002(\0132\031.hbas" +
+      "e.pb.RegionSpecifier\022&\n\005value\030\002 \002(\0132\027.hb" +
+      "ase.pb.NameBytesPair\"\226\001\n\006Action\022\r\n\005index" +
+      "\030\001 \001(\r\022)\n\010mutation\030\002 \001(\0132\027.hbase.pb.Muta",
+      "tionProto\022\032\n\003get\030\003 \001(\0132\r.hbase.pb.Get\0226\n" +
+      "\014service_call\030\004 \001(\0132 .hbase.pb.Coprocess" +
+      "orServiceCall\"k\n\014RegionAction\022)\n\006region\030" +
+      "\001 \002(\0132\031.hbase.pb.RegionSpecifier\022\016\n\006atom" +
+      "ic\030\002 \001(\010\022 \n\006action\030\003 \003(\0132\020.hbase.pb.Acti" +
+      "on\"c\n\017RegionLoadStats\022\027\n\014memstoreLoad\030\001 " +
+      "\001(\005:\0010\022\030\n\rheapOccupancy\030\002 \001(\005:\0010\022\035\n\022comp" +
+      "actionPressure\030\003 \001(\005:\0010\"\332\001\n\021ResultOrExce" +
+      "ption\022\r\n\005index\030\001 \001(\r\022 \n\006result\030\002 \001(\0132\020.h" +
+      "base.pb.Result\022*\n\texception\030\003 \001(\0132\027.hbas",
+      "e.pb.NameBytesPair\022:\n\016service_result\030\004 \001" +
+      "(\0132\".hbase.pb.CoprocessorServiceResult\022," +
+      "\n\tloadStats\030\005 \001(\0132\031.hbase.pb.RegionLoadS" +
+      "tats\"x\n\022RegionActionResult\0226\n\021resultOrEx" +
+      "ception\030\001 \003(\0132\033.hbase.pb.ResultOrExcepti" +
+      "on\022*\n\texception\030\002 \001(\0132\027.hbase.pb.NameByt" +
+      "esPair\"x\n\014MultiRequest\022,\n\014regionAction\030\001" +
+      " \003(\0132\026.hbase.pb.RegionAction\022\022\n\nnonceGro" +
+      "up\030\002 \001(\004\022&\n\tcondition\030\003 \001(\0132\023.hbase.pb.C" +
+      "ondition\"\\\n\rMultiResponse\0228\n\022regionActio",
+      "nResult\030\001 \003(\0132\034.hbase.pb.RegionActionRes" +
+      "ult\022\021\n\tprocessed\030\002 \001(\010*\'\n\013Consistency\022\n\n" +
+      "\006STRONG\020\000\022\014\n\010TIMELINE\020\0012\203\004\n\rClientServic" +
+      "e\0222\n\003Get\022\024.hbase.pb.GetRequest\032\025.hbase.p" +
+      "b.GetResponse\022;\n\006Mutate\022\027.hbase.pb.Mutat" +
+      "eRequest\032\030.hbase.pb.MutateResponse\0225\n\004Sc" +
+      "an\022\025.hbase.pb.ScanRequest\032\026.hbase.pb.Sca" +
+      "nResponse\022P\n\rBulkLoadHFile\022\036.hbase.pb.Bu" +
+      "lkLoadHFileRequest\032\037.hbase.pb.BulkLoadHF" +
+      "ileResponse\022X\n\013ExecService\022#.hbase.pb.Co",
+      "processorServiceRequest\032$.hbase.pb.Copro" +
+      "cessorServiceResponse\022d\n\027ExecRegionServe" +
+      "rService\022#.hbase.pb.CoprocessorServiceRe" +
+      "quest\032$.hbase.pb.CoprocessorServiceRespo" +
+      "nse\0228\n\005Multi\022\026.hbase.pb.MultiRequest\032\027.h" +
+      "base.pb.MultiResponseBB\n*org.apache.hado" +
+      "op.hbase.protobuf.generatedB\014ClientProto" +
+      "sH\001\210\001\001\240\001\001"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
       new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -33492,7 +34255,7 @@ public final class ClientProtos {
           internal_static_hbase_pb_Get_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_hbase_pb_Get_descriptor,
-              new java.lang.String[] { "Row", "Column", "Attribute", "Filter", "TimeRange", "MaxVersions", "CacheBlocks", "StoreLimit", "StoreOffset", "ExistenceOnly", "Consistency", });
+              new java.lang.String[] { "Row", "Column", "Attribute", "Filter", "TimeRange", "MaxVersions", "CacheBlocks", "StoreLimit", "StoreOffset", "ExistenceOnly", "Consistency", "CfTimeRange", });
           internal_static_hbase_pb_Result_descriptor =
             getDescriptor().getMessageTypes().get(4);
           internal_static_hbase_pb_Result_fieldAccessorTable = new
@@ -33552,7 +34315,7 @@ public final class ClientProtos {
           internal_static_hbase_pb_Scan_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_hbase_pb_Scan_descriptor,
-              new java.lang.String[] { "Column", "Attribute", "StartRow", "StopRow", "Filter", "TimeRange", "MaxVersions", "CacheBlocks", "BatchSize", "MaxResultSize", "StoreLimit", "StoreOffset", "LoadColumnFamiliesOnDemand", "Small", "Reversed", "Consistency", "Caching", "AllowPartialResults", });
+              new java.lang.String[] { "Column", "Attribute", "StartRow", "StopRow", "Filter", "TimeRange", "MaxVersions", "CacheBlocks", "BatchSize", "MaxResultSize", "StoreLimit", "StoreOffset", "LoadColumnFamiliesOnDemand", "Small", "Reversed", "Consistency", "Caching", "AllowPartialResults", "CfTimeRange", });
           internal_static_hbase_pb_ScanRequest_descriptor =
             getDescriptor().getMessageTypes().get(12);
           internal_static_hbase_pb_ScanRequest_fieldAccessorTable = new


Mime
View raw message