PHOENIX-2417 Compress memory used by row key byte[] of guideposts (Ankit 
Singhal)


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/6a27cecc
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/6a27cecc
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/6a27cecc

Branch: refs/heads/calcite
Commit: 6a27cecce312002f9b7f76ffdcafcb694f5e3ea8
Parents: 4d323b6
Author: James Taylor <jtay...@salesforce.com>
Authored: Wed Jan 20 09:57:14 2016 -0800
Committer: James Taylor <jtay...@salesforce.com>
Committed: Wed Jan 20 10:20:45 2016 -0800

----------------------------------------------------------------------
 .../coprocessor/MetaDataRegionObserver.java     |   71 +-
 .../generated/PGuidePostsProtos.java            |  287 +++-
 .../generated/StatCollectorProtos.java          | 1269 ------------------
 .../org/apache/phoenix/execute/ScanPlan.java    |    2 +-
 .../phoenix/iterate/BaseResultIterators.java    |  138 +-
 .../org/apache/phoenix/schema/PTableImpl.java   |   39 +-
 .../phoenix/schema/stats/GuidePostsInfo.java    |  106 +-
 .../schema/stats/GuidePostsInfoBuilder.java     |  113 ++
 .../phoenix/schema/stats/PTableStatsImpl.java   |   45 +-
 .../schema/stats/StatisticsCollector.java       |   46 +-
 .../phoenix/schema/stats/StatisticsScanner.java |    3 +-
 .../phoenix/schema/stats/StatisticsUtil.java    |   36 +-
 .../phoenix/schema/stats/StatisticsWriter.java  |   46 +-
 .../java/org/apache/phoenix/util/ByteUtil.java  |    2 +
 .../apache/phoenix/util/PrefixByteCodec.java    |  104 ++
 .../apache/phoenix/util/PrefixByteDecoder.java  |   90 ++
 .../apache/phoenix/util/PrefixByteEncoder.java  |   99 ++
 .../org/apache/phoenix/util/UpgradeUtil.java    |   68 +-
 .../phoenix/filter/SkipScanBigFilterTest.java   |    8 +-
 .../util/PrefixByteEncoderDecoderTest.java      |   96 ++
 phoenix-protocol/src/main/PGuidePosts.proto     |    3 +
 21 files changed, 1140 insertions(+), 1531 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/6a27cecc/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataRegionObserver.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataRegionObserver.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataRegionObserver.java
index c40e3cd..7950ac8 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataRegionObserver.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataRegionObserver.java
@@ -18,10 +18,6 @@
 package org.apache.phoenix.coprocessor;
 
 import java.io.IOException;
-
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.apache.phoenix.jdbc.PhoenixDriver;
 import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
@@ -36,28 +32,34 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CoprocessorEnvironment;
 import org.apache.hadoop.hbase.HConstants;
+import org.apache.hadoop.hbase.TableName;
+import org.apache.hadoop.hbase.client.HTableInterface;
 import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver;
 import org.apache.hadoop.hbase.coprocessor.ObserverContext;
 import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
-import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
 import org.apache.hadoop.hbase.filter.CompareFilter;
+import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
 import org.apache.hadoop.hbase.regionserver.RegionScanner;
 import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
 import org.apache.phoenix.cache.GlobalCache;
 import org.apache.phoenix.jdbc.PhoenixConnection;
 import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData;
+import org.apache.phoenix.jdbc.PhoenixDriver;
 import org.apache.phoenix.query.QueryServices;
 import org.apache.phoenix.query.QueryServicesOptions;
 import org.apache.phoenix.schema.MetaDataClient;
 import org.apache.phoenix.schema.PIndexState;
-import org.apache.phoenix.schema.types.PLong;
 import org.apache.phoenix.schema.PTable;
 import org.apache.phoenix.schema.TableRef;
+import org.apache.phoenix.schema.types.PLong;
 import org.apache.phoenix.util.MetaDataUtil;
 import org.apache.phoenix.util.PhoenixRuntime;
 import org.apache.phoenix.util.SchemaUtil;
+import org.apache.phoenix.util.UpgradeUtil;
 
 
 /**
@@ -96,10 +98,52 @@ public class MetaDataRegionObserver extends 
BaseRegionObserver {
         rebuildIndexTimeInterval = 
env.getConfiguration().getLong(QueryServices.INDEX_FAILURE_HANDLING_REBUILD_INTERVAL_ATTRIB,
             
QueryServicesOptions.DEFAULT_INDEX_FAILURE_HANDLING_REBUILD_INTERVAL);
     }
-
+    
+    private static String getJdbcUrl(RegionCoprocessorEnvironment env) {
+        String zkQuorum = 
env.getConfiguration().get(HConstants.ZOOKEEPER_QUORUM);
+        String zkClientPort = 
env.getConfiguration().get(HConstants.ZOOKEEPER_CLIENT_PORT,
+            Integer.toString(HConstants.DEFAULT_ZOOKEPER_CLIENT_PORT));
+        String zkParentNode = 
env.getConfiguration().get(HConstants.ZOOKEEPER_ZNODE_PARENT,
+            HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);
+        return PhoenixRuntime.JDBC_PROTOCOL + 
PhoenixRuntime.JDBC_PROTOCOL_SEPARATOR + zkQuorum
+            + PhoenixRuntime.JDBC_PROTOCOL_SEPARATOR + zkClientPort
+            + PhoenixRuntime.JDBC_PROTOCOL_SEPARATOR + zkParentNode;
+    }
 
     @Override
     public void postOpen(ObserverContext<RegionCoprocessorEnvironment> e) {
+        final RegionCoprocessorEnvironment env = e.getEnvironment();
+
+        Runnable r = new Runnable() {
+            @Override
+            public void run() {
+                HTableInterface metaTable = null;
+                HTableInterface statsTable = null;
+                try {
+                    Thread.sleep(1000);
+                    metaTable = 
env.getTable(TableName.valueOf(PhoenixDatabaseMetaData.SYSTEM_CATALOG_NAME));
+                    statsTable = 
env.getTable(TableName.valueOf(PhoenixDatabaseMetaData.SYSTEM_STATS_NAME));
+                    if (UpgradeUtil.truncateStats(metaTable, statsTable)) {
+                        LOG.info("Stats are successfully truncated for upgrade 
4.7!!");
+                    }
+                } catch (Exception exception) {
+                    LOG.warn("Exception while truncate stats..,"
+                            + " please check and delete stats manually inorder 
to get proper result with old client!!");
+                    LOG.warn(exception.getStackTrace());
+                } finally {
+                    try {
+                        if (metaTable != null) {
+                            metaTable.close();
+                        }
+                        if (statsTable != null) {
+                            statsTable.close();
+                        }
+                    } catch (IOException e) {}
+                }
+            }
+        };
+        (new Thread(r)).start();
+
         if (!enableRebuildIndex) {
             LOG.info("Failure Index Rebuild is skipped by configuration.");
             return;
@@ -134,17 +178,6 @@ public class MetaDataRegionObserver extends 
BaseRegionObserver {
             this.env = env;
         }
 
-        private String getJdbcUrl() {
-            String zkQuorum = 
this.env.getConfiguration().get(HConstants.ZOOKEEPER_QUORUM);
-            String zkClientPort = 
this.env.getConfiguration().get(HConstants.ZOOKEEPER_CLIENT_PORT,
-                Integer.toString(HConstants.DEFAULT_ZOOKEPER_CLIENT_PORT));
-            String zkParentNode = 
this.env.getConfiguration().get(HConstants.ZOOKEEPER_ZNODE_PARENT,
-                HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);
-            return PhoenixRuntime.JDBC_PROTOCOL + 
PhoenixRuntime.JDBC_PROTOCOL_SEPARATOR + zkQuorum
-                + PhoenixRuntime.JDBC_PROTOCOL_SEPARATOR + zkClientPort
-                + PhoenixRuntime.JDBC_PROTOCOL_SEPARATOR + zkParentNode;
-        }
-
         @Override
         public void run() {
             RegionScanner scanner = null;
@@ -219,7 +252,7 @@ public class MetaDataRegionObserver extends 
BaseRegionObserver {
                     }
 
                     if (conn == null) {
-                        conn = 
DriverManager.getConnection(getJdbcUrl()).unwrap(PhoenixConnection.class);
+                        conn = 
DriverManager.getConnection(getJdbcUrl(env)).unwrap(PhoenixConnection.class);
                     }
 
                     String dataTableFullName = 
SchemaUtil.getTableName(schemaName, dataTable);

http://git-wip-us.apache.org/repos/asf/phoenix/blob/6a27cecc/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/generated/PGuidePostsProtos.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/generated/PGuidePostsProtos.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/generated/PGuidePostsProtos.java
index 9f96530..d9dcb56 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/generated/PGuidePostsProtos.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/generated/PGuidePostsProtos.java
@@ -44,6 +44,36 @@ public final class PGuidePostsProtos {
      * <code>optional int64 rowCount = 3;</code>
      */
     long getRowCount();
+
+    // optional int32 maxLength = 4;
+    /**
+     * <code>optional int32 maxLength = 4;</code>
+     */
+    boolean hasMaxLength();
+    /**
+     * <code>optional int32 maxLength = 4;</code>
+     */
+    int getMaxLength();
+
+    // optional int32 encodedGuidePostsCount = 5;
+    /**
+     * <code>optional int32 encodedGuidePostsCount = 5;</code>
+     */
+    boolean hasEncodedGuidePostsCount();
+    /**
+     * <code>optional int32 encodedGuidePostsCount = 5;</code>
+     */
+    int getEncodedGuidePostsCount();
+
+    // optional bytes encodedGuidePosts = 6;
+    /**
+     * <code>optional bytes encodedGuidePosts = 6;</code>
+     */
+    boolean hasEncodedGuidePosts();
+    /**
+     * <code>optional bytes encodedGuidePosts = 6;</code>
+     */
+    com.google.protobuf.ByteString getEncodedGuidePosts();
   }
   /**
    * Protobuf type {@code PGuidePosts}
@@ -114,6 +144,21 @@ public final class PGuidePostsProtos {
               rowCount_ = input.readInt64();
               break;
             }
+            case 32: {
+              bitField0_ |= 0x00000004;
+              maxLength_ = input.readInt32();
+              break;
+            }
+            case 40: {
+              bitField0_ |= 0x00000008;
+              encodedGuidePostsCount_ = input.readInt32();
+              break;
+            }
+            case 50: {
+              bitField0_ |= 0x00000010;
+              encodedGuidePosts_ = input.readBytes();
+              break;
+            }
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
@@ -212,10 +257,61 @@ public final class PGuidePostsProtos {
       return rowCount_;
     }
 
+    // optional int32 maxLength = 4;
+    public static final int MAXLENGTH_FIELD_NUMBER = 4;
+    private int maxLength_;
+    /**
+     * <code>optional int32 maxLength = 4;</code>
+     */
+    public boolean hasMaxLength() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    /**
+     * <code>optional int32 maxLength = 4;</code>
+     */
+    public int getMaxLength() {
+      return maxLength_;
+    }
+
+    // optional int32 encodedGuidePostsCount = 5;
+    public static final int ENCODEDGUIDEPOSTSCOUNT_FIELD_NUMBER = 5;
+    private int encodedGuidePostsCount_;
+    /**
+     * <code>optional int32 encodedGuidePostsCount = 5;</code>
+     */
+    public boolean hasEncodedGuidePostsCount() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    /**
+     * <code>optional int32 encodedGuidePostsCount = 5;</code>
+     */
+    public int getEncodedGuidePostsCount() {
+      return encodedGuidePostsCount_;
+    }
+
+    // optional bytes encodedGuidePosts = 6;
+    public static final int ENCODEDGUIDEPOSTS_FIELD_NUMBER = 6;
+    private com.google.protobuf.ByteString encodedGuidePosts_;
+    /**
+     * <code>optional bytes encodedGuidePosts = 6;</code>
+     */
+    public boolean hasEncodedGuidePosts() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    /**
+     * <code>optional bytes encodedGuidePosts = 6;</code>
+     */
+    public com.google.protobuf.ByteString getEncodedGuidePosts() {
+      return encodedGuidePosts_;
+    }
+
     private void initFields() {
       guidePosts_ = java.util.Collections.emptyList();
       byteCount_ = 0L;
       rowCount_ = 0L;
+      maxLength_ = 0;
+      encodedGuidePostsCount_ = 0;
+      encodedGuidePosts_ = com.google.protobuf.ByteString.EMPTY;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -238,6 +334,15 @@ public final class PGuidePostsProtos {
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
         output.writeInt64(3, rowCount_);
       }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeInt32(4, maxLength_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeInt32(5, encodedGuidePostsCount_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeBytes(6, encodedGuidePosts_);
+      }
       getUnknownFields().writeTo(output);
     }
 
@@ -264,6 +369,18 @@ public final class PGuidePostsProtos {
         size += com.google.protobuf.CodedOutputStream
           .computeInt64Size(3, rowCount_);
       }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(4, maxLength_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(5, encodedGuidePostsCount_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(6, encodedGuidePosts_);
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -299,6 +416,21 @@ public final class PGuidePostsProtos {
         result = result && (getRowCount()
             == other.getRowCount());
       }
+      result = result && (hasMaxLength() == other.hasMaxLength());
+      if (hasMaxLength()) {
+        result = result && (getMaxLength()
+            == other.getMaxLength());
+      }
+      result = result && (hasEncodedGuidePostsCount() == 
other.hasEncodedGuidePostsCount());
+      if (hasEncodedGuidePostsCount()) {
+        result = result && (getEncodedGuidePostsCount()
+            == other.getEncodedGuidePostsCount());
+      }
+      result = result && (hasEncodedGuidePosts() == 
other.hasEncodedGuidePosts());
+      if (hasEncodedGuidePosts()) {
+        result = result && getEncodedGuidePosts()
+            .equals(other.getEncodedGuidePosts());
+      }
       result = result &&
           getUnknownFields().equals(other.getUnknownFields());
       return result;
@@ -324,6 +456,18 @@ public final class PGuidePostsProtos {
         hash = (37 * hash) + ROWCOUNT_FIELD_NUMBER;
         hash = (53 * hash) + hashLong(getRowCount());
       }
+      if (hasMaxLength()) {
+        hash = (37 * hash) + MAXLENGTH_FIELD_NUMBER;
+        hash = (53 * hash) + getMaxLength();
+      }
+      if (hasEncodedGuidePostsCount()) {
+        hash = (37 * hash) + ENCODEDGUIDEPOSTSCOUNT_FIELD_NUMBER;
+        hash = (53 * hash) + getEncodedGuidePostsCount();
+      }
+      if (hasEncodedGuidePosts()) {
+        hash = (37 * hash) + ENCODEDGUIDEPOSTS_FIELD_NUMBER;
+        hash = (53 * hash) + getEncodedGuidePosts().hashCode();
+      }
       hash = (29 * hash) + getUnknownFields().hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -439,6 +583,12 @@ public final class PGuidePostsProtos {
         bitField0_ = (bitField0_ & ~0x00000002);
         rowCount_ = 0L;
         bitField0_ = (bitField0_ & ~0x00000004);
+        maxLength_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        encodedGuidePostsCount_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        encodedGuidePosts_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000020);
         return this;
       }
 
@@ -480,6 +630,18 @@ public final class PGuidePostsProtos {
           to_bitField0_ |= 0x00000002;
         }
         result.rowCount_ = rowCount_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.maxLength_ = maxLength_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.encodedGuidePostsCount_ = encodedGuidePostsCount_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.encodedGuidePosts_ = encodedGuidePosts_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -512,6 +674,15 @@ public final class PGuidePostsProtos {
         if (other.hasRowCount()) {
           setRowCount(other.getRowCount());
         }
+        if (other.hasMaxLength()) {
+          setMaxLength(other.getMaxLength());
+        }
+        if (other.hasEncodedGuidePostsCount()) {
+          setEncodedGuidePostsCount(other.getEncodedGuidePostsCount());
+        }
+        if (other.hasEncodedGuidePosts()) {
+          setEncodedGuidePosts(other.getEncodedGuidePosts());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -677,6 +848,108 @@ public final class PGuidePostsProtos {
         return this;
       }
 
+      // optional int32 maxLength = 4;
+      private int maxLength_ ;
+      /**
+       * <code>optional int32 maxLength = 4;</code>
+       */
+      public boolean hasMaxLength() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      /**
+       * <code>optional int32 maxLength = 4;</code>
+       */
+      public int getMaxLength() {
+        return maxLength_;
+      }
+      /**
+       * <code>optional int32 maxLength = 4;</code>
+       */
+      public Builder setMaxLength(int value) {
+        bitField0_ |= 0x00000008;
+        maxLength_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional int32 maxLength = 4;</code>
+       */
+      public Builder clearMaxLength() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        maxLength_ = 0;
+        onChanged();
+        return this;
+      }
+
+      // optional int32 encodedGuidePostsCount = 5;
+      private int encodedGuidePostsCount_ ;
+      /**
+       * <code>optional int32 encodedGuidePostsCount = 5;</code>
+       */
+      public boolean hasEncodedGuidePostsCount() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      /**
+       * <code>optional int32 encodedGuidePostsCount = 5;</code>
+       */
+      public int getEncodedGuidePostsCount() {
+        return encodedGuidePostsCount_;
+      }
+      /**
+       * <code>optional int32 encodedGuidePostsCount = 5;</code>
+       */
+      public Builder setEncodedGuidePostsCount(int value) {
+        bitField0_ |= 0x00000010;
+        encodedGuidePostsCount_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional int32 encodedGuidePostsCount = 5;</code>
+       */
+      public Builder clearEncodedGuidePostsCount() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        encodedGuidePostsCount_ = 0;
+        onChanged();
+        return this;
+      }
+
+      // optional bytes encodedGuidePosts = 6;
+      private com.google.protobuf.ByteString encodedGuidePosts_ = 
com.google.protobuf.ByteString.EMPTY;
+      /**
+       * <code>optional bytes encodedGuidePosts = 6;</code>
+       */
+      public boolean hasEncodedGuidePosts() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      /**
+       * <code>optional bytes encodedGuidePosts = 6;</code>
+       */
+      public com.google.protobuf.ByteString getEncodedGuidePosts() {
+        return encodedGuidePosts_;
+      }
+      /**
+       * <code>optional bytes encodedGuidePosts = 6;</code>
+       */
+      public Builder setEncodedGuidePosts(com.google.protobuf.ByteString 
value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000020;
+        encodedGuidePosts_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional bytes encodedGuidePosts = 6;</code>
+       */
+      public Builder clearEncodedGuidePosts() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        encodedGuidePosts_ = getDefaultInstance().getEncodedGuidePosts();
+        onChanged();
+        return this;
+      }
+
       // @@protoc_insertion_point(builder_scope:PGuidePosts)
     }
 
@@ -702,11 +975,13 @@ public final class PGuidePostsProtos {
       descriptor;
   static {
     java.lang.String[] descriptorData = {
-      "\n\021PGuidePosts.proto\"F\n\013PGuidePosts\022\022\n\ngu" +
-      "idePosts\030\001 \003(\014\022\021\n\tbyteCount\030\002 
\001(\003\022\020\n\010row" +
-      "Count\030\003 \001(\003BE\n(org.apache.phoenix.coproc" +
-      "essor.generatedB\021PGuidePostsProtosH\001\210\001\001\240" +
-      "\001\001"
+      "\n\021PGuidePosts.proto\"\224\001\n\013PGuidePosts\022\022\n\ng" +
+      "uidePosts\030\001 \003(\014\022\021\n\tbyteCount\030\002 
\001(\003\022\020\n\010ro" +
+      "wCount\030\003 \001(\003\022\021\n\tmaxLength\030\004 
\001(\005\022\036\n\026encod" +
+      "edGuidePostsCount\030\005 \001(\005\022\031\n\021encodedGuideP" +
+      "osts\030\006 \001(\014BE\n(org.apache.phoenix.coproce" +
+      "ssor.generatedB\021PGuidePostsProtosH\001\210\001\001\240\001" +
+      "\001"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner 
assigner =
       new 
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -718,7 +993,7 @@ public final class PGuidePostsProtos {
           internal_static_PGuidePosts_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_PGuidePosts_descriptor,
-              new java.lang.String[] { "GuidePosts", "ByteCount", "RowCount", 
});
+              new java.lang.String[] { "GuidePosts", "ByteCount", "RowCount", 
"MaxLength", "EncodedGuidePostsCount", "EncodedGuidePosts", });
           return null;
         }
       };

http://git-wip-us.apache.org/repos/asf/phoenix/blob/6a27cecc/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/generated/StatCollectorProtos.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/generated/StatCollectorProtos.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/generated/StatCollectorProtos.java
deleted file mode 100644
index 5008f22..0000000
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/generated/StatCollectorProtos.java
+++ /dev/null
@@ -1,1269 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: StatisticsCollect.proto
-
-package org.apache.phoenix.coprocessor.generated;
-
-public final class StatCollectorProtos {
-  private StatCollectorProtos() {}
-  public static void registerAllExtensions(
-      com.google.protobuf.ExtensionRegistry registry) {
-  }
-  public interface StatCollectRequestOrBuilder
-      extends com.google.protobuf.MessageOrBuilder {
-
-    // optional bytes startRow = 1;
-    /**
-     * <code>optional bytes startRow = 1;</code>
-     */
-    boolean hasStartRow();
-    /**
-     * <code>optional bytes startRow = 1;</code>
-     */
-    com.google.protobuf.ByteString getStartRow();
-
-    // optional bytes stopRow = 2;
-    /**
-     * <code>optional bytes stopRow = 2;</code>
-     */
-    boolean hasStopRow();
-    /**
-     * <code>optional bytes stopRow = 2;</code>
-     */
-    com.google.protobuf.ByteString getStopRow();
-  }
-  /**
-   * Protobuf type {@code StatCollectRequest}
-   */
-  public static final class StatCollectRequest extends
-      com.google.protobuf.GeneratedMessage
-      implements StatCollectRequestOrBuilder {
-    // Use StatCollectRequest.newBuilder() to construct.
-    private StatCollectRequest(com.google.protobuf.GeneratedMessage.Builder<?> 
builder) {
-      super(builder);
-      this.unknownFields = builder.getUnknownFields();
-    }
-    private StatCollectRequest(boolean noInit) { this.unknownFields = 
com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
-
-    private static final StatCollectRequest defaultInstance;
-    public static StatCollectRequest getDefaultInstance() {
-      return defaultInstance;
-    }
-
-    public StatCollectRequest getDefaultInstanceForType() {
-      return defaultInstance;
-    }
-
-    private final com.google.protobuf.UnknownFieldSet unknownFields;
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-        getUnknownFields() {
-      return this.unknownFields;
-    }
-    private StatCollectRequest(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      initFields();
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-            case 10: {
-              bitField0_ |= 0x00000001;
-              startRow_ = input.readBytes();
-              break;
-            }
-            case 18: {
-              bitField0_ |= 0x00000002;
-              stopRow_ = input.readBytes();
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e.getMessage()).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.internal_static_StatCollectRequest_descriptor;
-    }
-
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.internal_static_StatCollectRequest_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest.class,
 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest.Builder.class);
-    }
-
-    public static com.google.protobuf.Parser<StatCollectRequest> PARSER =
-        new com.google.protobuf.AbstractParser<StatCollectRequest>() {
-      public StatCollectRequest parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new StatCollectRequest(input, extensionRegistry);
-      }
-    };
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<StatCollectRequest> getParserForType() {
-      return PARSER;
-    }
-
-    private int bitField0_;
-    // optional bytes startRow = 1;
-    public static final int STARTROW_FIELD_NUMBER = 1;
-    private com.google.protobuf.ByteString startRow_;
-    /**
-     * <code>optional bytes startRow = 1;</code>
-     */
-    public boolean hasStartRow() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    /**
-     * <code>optional bytes startRow = 1;</code>
-     */
-    public com.google.protobuf.ByteString getStartRow() {
-      return startRow_;
-    }
-
-    // optional bytes stopRow = 2;
-    public static final int STOPROW_FIELD_NUMBER = 2;
-    private com.google.protobuf.ByteString stopRow_;
-    /**
-     * <code>optional bytes stopRow = 2;</code>
-     */
-    public boolean hasStopRow() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    /**
-     * <code>optional bytes stopRow = 2;</code>
-     */
-    public com.google.protobuf.ByteString getStopRow() {
-      return stopRow_;
-    }
-
-    private void initFields() {
-      startRow_ = com.google.protobuf.ByteString.EMPTY;
-      stopRow_ = com.google.protobuf.ByteString.EMPTY;
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBytes(1, startRow_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeBytes(2, stopRow_);
-      }
-      getUnknownFields().writeTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(1, startRow_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(2, stopRow_);
-      }
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-
-    private static final long serialVersionUID = 0L;
-    @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest))
 {
-        return super.equals(obj);
-      }
-      
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
other = 
(org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest)
 obj;
-
-      boolean result = true;
-      result = result && (hasStartRow() == other.hasStartRow());
-      if (hasStartRow()) {
-        result = result && getStartRow()
-            .equals(other.getStartRow());
-      }
-      result = result && (hasStopRow() == other.hasStopRow());
-      if (hasStopRow()) {
-        result = result && getStopRow()
-            .equals(other.getStopRow());
-      }
-      result = result &&
-          getUnknownFields().equals(other.getUnknownFields());
-      return result;
-    }
-
-    private int memoizedHashCode = 0;
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptorForType().hashCode();
-      if (hasStartRow()) {
-        hash = (37 * hash) + STARTROW_FIELD_NUMBER;
-        hash = (53 * hash) + getStartRow().hashCode();
-      }
-      if (hasStopRow()) {
-        hash = (37 * hash) + STOPROW_FIELD_NUMBER;
-        hash = (53 * hash) + getStopRow().hashCode();
-      }
-      hash = (29 * hash) + getUnknownFields().hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
-    }
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
-    }
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-
-    public static Builder newBuilder() { return Builder.create(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder 
newBuilder(org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest
 prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code StatCollectRequest}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequestOrBuilder
 {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.internal_static_StatCollectRequest_descriptor;
-      }
-
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.internal_static_StatCollectRequest_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest.class,
 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest.Builder.class);
-      }
-
-      // Construct using 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-
-      public Builder clear() {
-        super.clear();
-        startRow_ = com.google.protobuf.ByteString.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        stopRow_ = com.google.protobuf.ByteString.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        return this;
-      }
-
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.internal_static_StatCollectRequest_descriptor;
-      }
-
-      public 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
getDefaultInstanceForType() {
-        return 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest.getDefaultInstance();
-      }
-
-      public 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
build() {
-        
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      public 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
buildPartial() {
-        
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
result = new 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.startRow_ = startRow_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.stopRow_ = stopRow_;
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest)
 {
-          return 
mergeFrom((org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder 
mergeFrom(org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest
 other) {
-        if (other == 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest.getDefaultInstance())
 return this;
-        if (other.hasStartRow()) {
-          setStartRow(other.getStartRow());
-        }
-        if (other.hasStopRow()) {
-          setStopRow(other.getStopRow());
-        }
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = 
(org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest)
 e.getUnfinishedMessage();
-          throw e;
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      // optional bytes startRow = 1;
-      private com.google.protobuf.ByteString startRow_ = 
com.google.protobuf.ByteString.EMPTY;
-      /**
-       * <code>optional bytes startRow = 1;</code>
-       */
-      public boolean hasStartRow() {
-        return ((bitField0_ & 0x00000001) == 0x00000001);
-      }
-      /**
-       * <code>optional bytes startRow = 1;</code>
-       */
-      public com.google.protobuf.ByteString getStartRow() {
-        return startRow_;
-      }
-      /**
-       * <code>optional bytes startRow = 1;</code>
-       */
-      public Builder setStartRow(com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000001;
-        startRow_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional bytes startRow = 1;</code>
-       */
-      public Builder clearStartRow() {
-        bitField0_ = (bitField0_ & ~0x00000001);
-        startRow_ = getDefaultInstance().getStartRow();
-        onChanged();
-        return this;
-      }
-
-      // optional bytes stopRow = 2;
-      private com.google.protobuf.ByteString stopRow_ = 
com.google.protobuf.ByteString.EMPTY;
-      /**
-       * <code>optional bytes stopRow = 2;</code>
-       */
-      public boolean hasStopRow() {
-        return ((bitField0_ & 0x00000002) == 0x00000002);
-      }
-      /**
-       * <code>optional bytes stopRow = 2;</code>
-       */
-      public com.google.protobuf.ByteString getStopRow() {
-        return stopRow_;
-      }
-      /**
-       * <code>optional bytes stopRow = 2;</code>
-       */
-      public Builder setStopRow(com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000002;
-        stopRow_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional bytes stopRow = 2;</code>
-       */
-      public Builder clearStopRow() {
-        bitField0_ = (bitField0_ & ~0x00000002);
-        stopRow_ = getDefaultInstance().getStopRow();
-        onChanged();
-        return this;
-      }
-
-      // @@protoc_insertion_point(builder_scope:StatCollectRequest)
-    }
-
-    static {
-      defaultInstance = new StatCollectRequest(true);
-      defaultInstance.initFields();
-    }
-
-    // @@protoc_insertion_point(class_scope:StatCollectRequest)
-  }
-
-  public interface StatCollectResponseOrBuilder
-      extends com.google.protobuf.MessageOrBuilder {
-
-    // required uint64 rowsScanned = 1;
-    /**
-     * <code>required uint64 rowsScanned = 1;</code>
-     */
-    boolean hasRowsScanned();
-    /**
-     * <code>required uint64 rowsScanned = 1;</code>
-     */
-    long getRowsScanned();
-  }
-  /**
-   * Protobuf type {@code StatCollectResponse}
-   */
-  public static final class StatCollectResponse extends
-      com.google.protobuf.GeneratedMessage
-      implements StatCollectResponseOrBuilder {
-    // Use StatCollectResponse.newBuilder() to construct.
-    private 
StatCollectResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
-      super(builder);
-      this.unknownFields = builder.getUnknownFields();
-    }
-    private StatCollectResponse(boolean noInit) { this.unknownFields = 
com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
-
-    private static final StatCollectResponse defaultInstance;
-    public static StatCollectResponse getDefaultInstance() {
-      return defaultInstance;
-    }
-
-    public StatCollectResponse getDefaultInstanceForType() {
-      return defaultInstance;
-    }
-
-    private final com.google.protobuf.UnknownFieldSet unknownFields;
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-        getUnknownFields() {
-      return this.unknownFields;
-    }
-    private StatCollectResponse(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      initFields();
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-            case 8: {
-              bitField0_ |= 0x00000001;
-              rowsScanned_ = input.readUInt64();
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e.getMessage()).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.internal_static_StatCollectResponse_descriptor;
-    }
-
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.internal_static_StatCollectResponse_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse.class,
 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse.Builder.class);
-    }
-
-    public static com.google.protobuf.Parser<StatCollectResponse> PARSER =
-        new com.google.protobuf.AbstractParser<StatCollectResponse>() {
-      public StatCollectResponse parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new StatCollectResponse(input, extensionRegistry);
-      }
-    };
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<StatCollectResponse> getParserForType() {
-      return PARSER;
-    }
-
-    private int bitField0_;
-    // required uint64 rowsScanned = 1;
-    public static final int ROWSSCANNED_FIELD_NUMBER = 1;
-    private long rowsScanned_;
-    /**
-     * <code>required uint64 rowsScanned = 1;</code>
-     */
-    public boolean hasRowsScanned() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    /**
-     * <code>required uint64 rowsScanned = 1;</code>
-     */
-    public long getRowsScanned() {
-      return rowsScanned_;
-    }
-
-    private void initFields() {
-      rowsScanned_ = 0L;
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
-
-      if (!hasRowsScanned()) {
-        memoizedIsInitialized = 0;
-        return false;
-      }
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeUInt64(1, rowsScanned_);
-      }
-      getUnknownFields().writeTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt64Size(1, rowsScanned_);
-      }
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-
-    private static final long serialVersionUID = 0L;
-    @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse))
 {
-        return super.equals(obj);
-      }
-      
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 other = 
(org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse)
 obj;
-
-      boolean result = true;
-      result = result && (hasRowsScanned() == other.hasRowsScanned());
-      if (hasRowsScanned()) {
-        result = result && (getRowsScanned()
-            == other.getRowsScanned());
-      }
-      result = result &&
-          getUnknownFields().equals(other.getUnknownFields());
-      return result;
-    }
-
-    private int memoizedHashCode = 0;
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptorForType().hashCode();
-      if (hasRowsScanned()) {
-        hash = (37 * hash) + ROWSSCANNED_FIELD_NUMBER;
-        hash = (53 * hash) + hashLong(getRowsScanned());
-      }
-      hash = (29 * hash) + getUnknownFields().hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
-    }
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
-    }
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-
-    public static Builder newBuilder() { return Builder.create(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder 
newBuilder(org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code StatCollectResponse}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponseOrBuilder
 {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.internal_static_StatCollectResponse_descriptor;
-      }
-
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.internal_static_StatCollectResponse_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse.class,
 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse.Builder.class);
-      }
-
-      // Construct using 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-
-      public Builder clear() {
-        super.clear();
-        rowsScanned_ = 0L;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        return this;
-      }
-
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.internal_static_StatCollectResponse_descriptor;
-      }
-
-      public 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 getDefaultInstanceForType() {
-        return 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse.getDefaultInstance();
-      }
-
-      public 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 build() {
-        
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      public 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 buildPartial() {
-        
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 result = new 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.rowsScanned_ = rowsScanned_;
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse)
 {
-          return 
mergeFrom((org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder 
mergeFrom(org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 other) {
-        if (other == 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse.getDefaultInstance())
 return this;
-        if (other.hasRowsScanned()) {
-          setRowsScanned(other.getRowsScanned());
-        }
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-
-      public final boolean isInitialized() {
-        if (!hasRowsScanned()) {
-          
-          return false;
-        }
-        return true;
-      }
-
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = 
(org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse)
 e.getUnfinishedMessage();
-          throw e;
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      // required uint64 rowsScanned = 1;
-      private long rowsScanned_ ;
-      /**
-       * <code>required uint64 rowsScanned = 1;</code>
-       */
-      public boolean hasRowsScanned() {
-        return ((bitField0_ & 0x00000001) == 0x00000001);
-      }
-      /**
-       * <code>required uint64 rowsScanned = 1;</code>
-       */
-      public long getRowsScanned() {
-        return rowsScanned_;
-      }
-      /**
-       * <code>required uint64 rowsScanned = 1;</code>
-       */
-      public Builder setRowsScanned(long value) {
-        bitField0_ |= 0x00000001;
-        rowsScanned_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>required uint64 rowsScanned = 1;</code>
-       */
-      public Builder clearRowsScanned() {
-        bitField0_ = (bitField0_ & ~0x00000001);
-        rowsScanned_ = 0L;
-        onChanged();
-        return this;
-      }
-
-      // @@protoc_insertion_point(builder_scope:StatCollectResponse)
-    }
-
-    static {
-      defaultInstance = new StatCollectResponse(true);
-      defaultInstance.initFields();
-    }
-
-    // @@protoc_insertion_point(class_scope:StatCollectResponse)
-  }
-
-  /**
-   * Protobuf service {@code StatCollectService}
-   */
-  public static abstract class StatCollectService
-      implements com.google.protobuf.Service {
-    protected StatCollectService() {}
-
-    public interface Interface {
-      /**
-       * <code>rpc collectStat(.StatCollectRequest) returns 
(.StatCollectResponse);</code>
-       */
-      public abstract void collectStat(
-          com.google.protobuf.RpcController controller,
-          
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
request,
-          
com.google.protobuf.RpcCallback<org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse>
 done);
-
-    }
-
-    public static com.google.protobuf.Service newReflectiveService(
-        final Interface impl) {
-      return new StatCollectService() {
-        @java.lang.Override
-        public  void collectStat(
-            com.google.protobuf.RpcController controller,
-            
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
request,
-            
com.google.protobuf.RpcCallback<org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse>
 done) {
-          impl.collectStat(controller, request, done);
-        }
-
-      };
-    }
-
-    public static com.google.protobuf.BlockingService
-        newReflectiveBlockingService(final BlockingInterface impl) {
-      return new com.google.protobuf.BlockingService() {
-        public final com.google.protobuf.Descriptors.ServiceDescriptor
-            getDescriptorForType() {
-          return getDescriptor();
-        }
-
-        public final com.google.protobuf.Message callBlockingMethod(
-            com.google.protobuf.Descriptors.MethodDescriptor method,
-            com.google.protobuf.RpcController controller,
-            com.google.protobuf.Message request)
-            throws com.google.protobuf.ServiceException {
-          if (method.getService() != getDescriptor()) {
-            throw new java.lang.IllegalArgumentException(
-              "Service.callBlockingMethod() given method descriptor for " +
-              "wrong service type.");
-          }
-          switch(method.getIndex()) {
-            case 0:
-              return impl.collectStat(controller, 
(org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest)request);
-            default:
-              throw new java.lang.AssertionError("Can't get here.");
-          }
-        }
-
-        public final com.google.protobuf.Message
-            getRequestPrototype(
-            com.google.protobuf.Descriptors.MethodDescriptor method) {
-          if (method.getService() != getDescriptor()) {
-            throw new java.lang.IllegalArgumentException(
-              "Service.getRequestPrototype() given method " +
-              "descriptor for wrong service type.");
-          }
-          switch(method.getIndex()) {
-            case 0:
-              return 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest.getDefaultInstance();
-            default:
-              throw new java.lang.AssertionError("Can't get here.");
-          }
-        }
-
-        public final com.google.protobuf.Message
-            getResponsePrototype(
-            com.google.protobuf.Descriptors.MethodDescriptor method) {
-          if (method.getService() != getDescriptor()) {
-            throw new java.lang.IllegalArgumentException(
-              "Service.getResponsePrototype() given method " +
-              "descriptor for wrong service type.");
-          }
-          switch(method.getIndex()) {
-            case 0:
-              return 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse.getDefaultInstance();
-            default:
-              throw new java.lang.AssertionError("Can't get here.");
-          }
-        }
-
-      };
-    }
-
-    /**
-     * <code>rpc collectStat(.StatCollectRequest) returns 
(.StatCollectResponse);</code>
-     */
-    public abstract void collectStat(
-        com.google.protobuf.RpcController controller,
-        
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
request,
-        
com.google.protobuf.RpcCallback<org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse>
 done);
-
-    public static final
-        com.google.protobuf.Descriptors.ServiceDescriptor
-        getDescriptor() {
-      return 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.getDescriptor().getServices().get(0);
-    }
-    public final com.google.protobuf.Descriptors.ServiceDescriptor
-        getDescriptorForType() {
-      return getDescriptor();
-    }
-
-    public final void callMethod(
-        com.google.protobuf.Descriptors.MethodDescriptor method,
-        com.google.protobuf.RpcController controller,
-        com.google.protobuf.Message request,
-        com.google.protobuf.RpcCallback<
-          com.google.protobuf.Message> done) {
-      if (method.getService() != getDescriptor()) {
-        throw new java.lang.IllegalArgumentException(
-          "Service.callMethod() given method descriptor for wrong " +
-          "service type.");
-      }
-      switch(method.getIndex()) {
-        case 0:
-          this.collectStat(controller, 
(org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest)request,
-            
com.google.protobuf.RpcUtil.<org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse>specializeCallback(
-              done));
-          return;
-        default:
-          throw new java.lang.AssertionError("Can't get here.");
-      }
-    }
-
-    public final com.google.protobuf.Message
-        getRequestPrototype(
-        com.google.protobuf.Descriptors.MethodDescriptor method) {
-      if (method.getService() != getDescriptor()) {
-        throw new java.lang.IllegalArgumentException(
-          "Service.getRequestPrototype() given method " +
-          "descriptor for wrong service type.");
-      }
-      switch(method.getIndex()) {
-        case 0:
-          return 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest.getDefaultInstance();
-        default:
-          throw new java.lang.AssertionError("Can't get here.");
-      }
-    }
-
-    public final com.google.protobuf.Message
-        getResponsePrototype(
-        com.google.protobuf.Descriptors.MethodDescriptor method) {
-      if (method.getService() != getDescriptor()) {
-        throw new java.lang.IllegalArgumentException(
-          "Service.getResponsePrototype() given method " +
-          "descriptor for wrong service type.");
-      }
-      switch(method.getIndex()) {
-        case 0:
-          return 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse.getDefaultInstance();
-        default:
-          throw new java.lang.AssertionError("Can't get here.");
-      }
-    }
-
-    public static Stub newStub(
-        com.google.protobuf.RpcChannel channel) {
-      return new Stub(channel);
-    }
-
-    public static final class Stub extends 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectService 
implements Interface {
-      private Stub(com.google.protobuf.RpcChannel channel) {
-        this.channel = channel;
-      }
-
-      private final com.google.protobuf.RpcChannel channel;
-
-      public com.google.protobuf.RpcChannel getChannel() {
-        return channel;
-      }
-
-      public  void collectStat(
-          com.google.protobuf.RpcController controller,
-          
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
request,
-          
com.google.protobuf.RpcCallback<org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse>
 done) {
-        channel.callMethod(
-          getDescriptor().getMethods().get(0),
-          controller,
-          request,
-          
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse.getDefaultInstance(),
-          com.google.protobuf.RpcUtil.generalizeCallback(
-            done,
-            
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse.class,
-            
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse.getDefaultInstance()));
-      }
-    }
-
-    public static BlockingInterface newBlockingStub(
-        com.google.protobuf.BlockingRpcChannel channel) {
-      return new BlockingStub(channel);
-    }
-
-    public interface BlockingInterface {
-      public 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 collectStat(
-          com.google.protobuf.RpcController controller,
-          
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
request)
-          throws com.google.protobuf.ServiceException;
-    }
-
-    private static final class BlockingStub implements BlockingInterface {
-      private BlockingStub(com.google.protobuf.BlockingRpcChannel channel) {
-        this.channel = channel;
-      }
-
-      private final com.google.protobuf.BlockingRpcChannel channel;
-
-      public 
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse
 collectStat(
-          com.google.protobuf.RpcController controller,
-          
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectRequest 
request)
-          throws com.google.protobuf.ServiceException {
-        return 
(org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse)
 channel.callBlockingMethod(
-          getDescriptor().getMethods().get(0),
-          controller,
-          request,
-          
org.apache.phoenix.coprocessor.generated.StatCollectorProtos.StatCollectResponse.getDefaultInstance());
-      }
-
-    }
-
-    // @@protoc_insertion_point(class_scope:StatCollectService)
-  }
-
-  private static com.google.protobuf.Descriptors.Descriptor
-    internal_static_StatCollectRequest_descriptor;
-  private static
-    com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_StatCollectRequest_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
-    internal_static_StatCollectResponse_descriptor;
-  private static
-    com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_StatCollectResponse_fieldAccessorTable;
-
-  public static com.google.protobuf.Descriptors.FileDescriptor
-      getDescriptor() {
-    return descriptor;
-  }
-  private static com.google.protobuf.Descriptors.FileDescriptor
-      descriptor;
-  static {
-    java.lang.String[] descriptorData = {
-      "\n\027StatisticsCollect.proto\"7\n\022StatCollect" +
-      "Request\022\020\n\010startRow\030\001 
\001(\014\022\017\n\007stopRow\030\002 \001" +
-      "(\014\"*\n\023StatCollectResponse\022\023\n\013rowsScanned" +
-      "\030\001 \002(\0042N\n\022StatCollectService\0228\n\013collectS" +
-      "tat\022\023.StatCollectRequest\032\024.StatCollectRe" +
-      "sponseBG\n(org.apache.phoenix.coprocessor" +
-      ".generatedB\023StatCollectorProtosH\001\210\001\001\240\001\001"
-    };
-    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner 
assigner =
-      new 
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
-        public com.google.protobuf.ExtensionRegistry assignDescriptors(
-            com.google.protobuf.Descriptors.FileDescriptor root) {
-          descriptor = root;
-          internal_static_StatCollectRequest_descriptor =
-            getDescriptor().getMessageTypes().get(0);
-          internal_static_StatCollectRequest_fieldAccessorTable = new
-            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-              internal_static_StatCollectRequest_descriptor,
-              new java.lang.String[] { "StartRow", "StopRow", });
-          internal_static_StatCollectResponse_descriptor =
-            getDescriptor().getMessageTypes().get(1);
-          internal_static_StatCollectResponse_fieldAccessorTable = new
-            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-              internal_static_StatCollectResponse_descriptor,
-              new java.lang.String[] { "RowsScanned", });
-          return null;
-        }
-      };
-    com.google.protobuf.Descriptors.FileDescriptor
-      .internalBuildGeneratedFileFrom(descriptorData,
-        new com.google.protobuf.Descriptors.FileDescriptor[] {
-        }, assigner);
-  }
-
-  // @@protoc_insertion_point(outer_class_scope)
-}

http://git-wip-us.apache.org/repos/asf/phoenix/blob/6a27cecc/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java 
b/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java
index 816cd1b..efb00a8 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java
@@ -122,7 +122,7 @@ public class ScanPlan extends BaseQueryPlan {
         } else {
             // Region size estimated based on total number of bytes divided by 
number of regions
             long totByteSize = gpsInfo.getByteCount();
-            estRegionSize = totByteSize / (gpsInfo.getGuidePosts().size()+1);
+            estRegionSize = totByteSize / (gpsInfo.getGuidePostsCount()+1);
         }
         // TODO: configurable number of bytes?
         boolean isSerial = (perScanLimit * estRowSize < estRegionSize);

http://git-wip-us.apache.org/repos/asf/phoenix/blob/6a27cecc/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
index 519b38f..b3235e2 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
@@ -22,6 +22,10 @@ import static 
org.apache.phoenix.monitoring.GlobalClientMetrics.GLOBAL_FAILED_QU
 import static 
org.apache.phoenix.monitoring.GlobalClientMetrics.GLOBAL_QUERY_TIMEOUT_COUNTER;
 import static org.apache.phoenix.util.ByteUtil.EMPTY_BYTE_ARRAY;
 
+import java.io.ByteArrayInputStream;
+import java.io.DataInput;
+import java.io.DataInputStream;
+import java.io.EOFException;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -46,6 +50,7 @@ import org.apache.hadoop.hbase.HRegionLocation;
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter;
 import org.apache.hadoop.hbase.filter.PageFilter;
+import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.Pair;
 import org.apache.phoenix.compile.QueryPlan;
@@ -75,7 +80,10 @@ import 
org.apache.phoenix.schema.StaleRegionBoundaryCacheException;
 import org.apache.phoenix.schema.TableRef;
 import org.apache.phoenix.schema.stats.GuidePostsInfo;
 import org.apache.phoenix.schema.stats.PTableStats;
+import org.apache.phoenix.util.ByteUtil;
+import org.apache.phoenix.util.PrefixByteCodec;
 import org.apache.phoenix.util.LogUtil;
+import org.apache.phoenix.util.PrefixByteDecoder;
 import org.apache.phoenix.util.SQLCloseables;
 import org.apache.phoenix.util.ScanUtil;
 import org.apache.phoenix.util.SchemaUtil;
@@ -356,22 +364,18 @@ public abstract class BaseResultIterators extends 
ExplainTable implements Result
         guideIndex = (guideIndex < 0 ? -(guideIndex + 1) : guideIndex);
         return guideIndex;
     }
-    
-    private List<byte[]> getGuidePosts(Set<byte[]> whereConditions) {
+
+    private GuidePostsInfo getGuidePosts(Set<byte[]> whereConditions) {
         /*
-         *  Don't use guide posts if:
-         *  1) We're doing a point lookup, as HBase is fast enough at those
-         *     to not need them to be further parallelized. TODO: pref test to 
verify
-         *  2) We're collecting stats, as in this case we need to scan entire
-         *     regions worth of data to track where to put the guide posts.
+         * Don't use guide posts if: 1) We're doing a point lookup, as HBase 
is fast enough at those to not need them to
+         * be further parallelized. TODO: pref test to verify 2) We're 
collecting stats, as in this case we need to scan
+         * entire regions worth of data to track where to put the guide posts.
          */
-        if (!useStats()) {
-            return Collections.emptyList();
-        }
-        
-        List<byte[]> gps = null;
+        if (!useStats()) { return GuidePostsInfo.EMPTY_GUIDEPOST; }
+
+        GuidePostsInfo gps = null;
         PTable table = getTable();
-        Map<byte[],GuidePostsInfo> guidePostMap = tableStats.getGuidePosts();
+        Map<byte[], GuidePostsInfo> guidePostMap = tableStats.getGuidePosts();
         byte[] defaultCF = SchemaUtil.getEmptyColumnFamily(getTable());
         if (table.getColumnFamilies().isEmpty()) {
             // For sure we can get the defaultCF from the table
@@ -379,37 +383,35 @@ public abstract class BaseResultIterators extends 
ExplainTable implements Result
         } else {
             byte[] familyInWhere = null;
             if (!whereConditions.isEmpty()) {
-              if (whereConditions.contains(defaultCF)) {
-                gps = getDefaultFamilyGuidePosts(guidePostMap, defaultCF);
-              } else {
-                familyInWhere = whereConditions.iterator().next();
-                if(familyInWhere != null) {
-                  GuidePostsInfo guidePostsInfo = 
guidePostMap.get(familyInWhere);
-                  if (guidePostsInfo != null) {
-                      gps = guidePostsInfo.getGuidePosts();
-                  } else {
-                    // As there are no guideposts collected for the where 
family we go with the default CF
+                if (whereConditions.contains(defaultCF)) {
                     gps = getDefaultFamilyGuidePosts(guidePostMap, defaultCF);
-                  }
+                } else {
+                    familyInWhere = whereConditions.iterator().next();
+                    if (familyInWhere != null) {
+                        GuidePostsInfo guidePostsInfo = 
guidePostMap.get(familyInWhere);
+                        if (guidePostsInfo != null) {
+                            gps = guidePostsInfo;
+                        } else {
+                            // As there are no guideposts collected for the 
where family we go with the default CF
+                            gps = getDefaultFamilyGuidePosts(guidePostMap, 
defaultCF);
+                        }
+                    }
                 }
-              }
             } else {
-              gps = getDefaultFamilyGuidePosts(guidePostMap, defaultCF);
+                gps = getDefaultFamilyGuidePosts(guidePostMap, defaultCF);
             }
         }
-        if (gps == null) {
-            return Collections.emptyList();
-        }
+        if (gps == null) { return GuidePostsInfo.EMPTY_GUIDEPOST; }
         return gps;
     }
 
-    private List<byte[]> getDefaultFamilyGuidePosts(Map<byte[], 
GuidePostsInfo> guidePostMap, byte[] defaultCF) {
-      if (guidePostMap.get(defaultCF) != null) {
-          return guidePostMap.get(defaultCF).getGuidePosts();
-      }
-      return null;
+    private GuidePostsInfo getDefaultFamilyGuidePosts(Map<byte[], 
GuidePostsInfo> guidePostMap, byte[] defaultCF) {
+        if (guidePostMap.get(defaultCF) != null) {
+                return guidePostMap.get(defaultCF);
+        }
+        return null;
     }
-    
+
     private static String toString(List<byte[]> gps) {
         StringBuilder buf = new StringBuilder(gps.size() * 100);
         buf.append("[");
@@ -461,10 +463,7 @@ public abstract class BaseResultIterators extends 
ExplainTable implements Result
         for(Pair<byte[], byte[]> where : context.getWhereConditionColumns()) {
           whereConditions.add(where.getFirst());
         }
-        List<byte[]> gps = getGuidePosts(whereConditions);
-        if (logger.isDebugEnabled()) {
-            logger.debug("Guideposts: " + toString(gps));
-        }
+        GuidePostsInfo gps = getGuidePosts(whereConditions);
         boolean traverseAllRegions = isSalted || isLocalIndex;
         if (!traverseAllRegions) {
             byte[] scanStartRow = scan.getStartRow();
@@ -490,15 +489,35 @@ public abstract class BaseResultIterators extends 
ExplainTable implements Result
         }
         List<List<Scan>> parallelScans = 
Lists.newArrayListWithExpectedSize(stopIndex - regionIndex + 1);
         
-        byte[] currentKey = startKey;
-        int guideIndex = currentKey.length == 0 ? 0 : 
getIndexContainingInclusive(gps, currentKey);
-        int gpsSize = gps.size();
+        ImmutableBytesWritable currentKey = new 
ImmutableBytesWritable(startKey);
+        
+        int gpsSize = gps.getGuidePostsCount();
         int estGuidepostsPerRegion = gpsSize == 0 ? 1 : gpsSize / 
regionLocations.size() + 1;
         int keyOffset = 0;
+        ImmutableBytesWritable currentGuidePost = 
ByteUtil.EMPTY_IMMUTABLE_BYTE_ARRAY;
         List<Scan> scans = 
Lists.newArrayListWithExpectedSize(estGuidepostsPerRegion);
+        ImmutableBytesWritable guidePosts = gps.getGuidePosts();
+        ByteArrayInputStream stream = null;
+        DataInput input = null;
+        PrefixByteDecoder decoder = null;
+        int guideIndex = 0;
+        if (gpsSize > 0) {
+            stream = new ByteArrayInputStream(guidePosts.get(), 
guidePosts.getOffset(), guidePosts.getLength());
+            input = new DataInputStream(stream);
+            decoder = new PrefixByteDecoder(gps.getMaxLength());
+            try {
+                while (currentKey.compareTo(currentGuidePost = 
PrefixByteCodec.decode(decoder, input)) >= 0
+                        && currentKey.getLength() != 0) {
+                    guideIndex++;
+                }
+            } catch (EOFException e) {}
+        }
+        byte[] currentKeyBytes = currentKey.copyBytes();
+
         // Merge bisect with guideposts for all but the last region
         while (regionIndex <= stopIndex) {
-            byte[] currentGuidePost, endKey, endRegionKey = EMPTY_BYTE_ARRAY;
+            byte[] currentGuidePostBytes = currentGuidePost.copyBytes();
+            byte[] endKey, endRegionKey = EMPTY_BYTE_ARRAY;
             if (regionIndex == stopIndex) {
                 endKey = stopKey;
             } else {
@@ -510,14 +529,18 @@ public abstract class BaseResultIterators extends 
ExplainTable implements Result
                 endRegionKey = regionInfo.getEndKey();
                 keyOffset = ScanUtil.getRowKeyOffset(regionInfo.getStartKey(), 
endRegionKey);
             }
-            while (guideIndex < gpsSize
-                    && (Bytes.compareTo(currentGuidePost = 
gps.get(guideIndex), endKey) <= 0 || endKey.length == 0)) {
-                Scan newScan = scanRanges.intersectScan(scan, currentKey, 
currentGuidePost, keyOffset, false);
-                scans = addNewScan(parallelScans, scans, newScan, 
currentGuidePost, false, regionLocation);
-                currentKey = currentGuidePost;
-                guideIndex++;
-            }
-            Scan newScan = scanRanges.intersectScan(scan, currentKey, endKey, 
keyOffset, true);
+            try {
+                while (guideIndex < gpsSize && 
(currentGuidePost.compareTo(endKey) <= 0 || endKey.length == 0)) {
+                    Scan newScan = scanRanges.intersectScan(scan, 
currentKeyBytes, currentGuidePostBytes, keyOffset,
+                            false);
+                    scans = addNewScan(parallelScans, scans, newScan, 
currentGuidePostBytes, false, regionLocation);
+                    currentKeyBytes = currentGuidePost.copyBytes();
+                    currentGuidePost = PrefixByteCodec.decode(decoder, input);
+                    currentGuidePostBytes = currentGuidePost.copyBytes();
+                    guideIndex++;
+                }
+            } catch (EOFException e) {}
+            Scan newScan = scanRanges.intersectScan(scan, currentKeyBytes, 
endKey, keyOffset, true);
             if (isLocalIndex) {
                 if (newScan != null) {
                     newScan.setAttribute(EXPECTED_UPPER_REGION_KEY, 
endRegionKey);
@@ -526,15 +549,17 @@ public abstract class BaseResultIterators extends 
ExplainTable implements Result
                 }
             }
             scans = addNewScan(parallelScans, scans, newScan, endKey, true, 
regionLocation);
-            currentKey = endKey;
+            currentKeyBytes = endKey;
             regionIndex++;
         }
         if (!scans.isEmpty()) { // Add any remaining scans
             parallelScans.add(scans);
         }
+        PrefixByteCodec.close(stream);
         return parallelScans;
     }
 
+   
     public static <T> List<T> reverseIfNecessary(List<T> list, boolean 
reverse) {
         if (!reverse) {
             return list;
@@ -805,8 +830,9 @@ public abstract class BaseResultIterators extends 
ExplainTable implements Result
         explain(buf.toString(),planSteps);
     }
 
-       @Override
-       public String toString() {
-               return "ResultIterators [name=" + getName() + ",id=" + scanId + 
",scans=" + scans + "]";
-       }
+    @Override
+    public String toString() {
+        return "ResultIterators [name=" + getName() + ",id=" + scanId + 
",scans=" + scans + "]";
+    }
+
 }
\ No newline at end of file

Reply via email to