refactor: remove the protos and generated codes, use ceresdbproto instead (#36)

diff --git a/ceresdb-protocol/pom.xml b/ceresdb-protocol/pom.xml
index 899cc65..9fd3d53 100644
--- a/ceresdb-protocol/pom.xml
+++ b/ceresdb-protocol/pom.xml
@@ -15,6 +15,12 @@
             <artifactId>ceresdb-rpc</artifactId>
         </dependency>
 
+        <!-- an independent protocal lib for all ceresdb components -->
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>ceresdb-proto-internal</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
diff --git a/ceresdb-protocol/src/main/java/io/ceresdb/QueryClient.java b/ceresdb-protocol/src/main/java/io/ceresdb/QueryClient.java
index f50c66d..5d74d9a 100644
--- a/ceresdb-protocol/src/main/java/io/ceresdb/QueryClient.java
+++ b/ceresdb-protocol/src/main/java/io/ceresdb/QueryClient.java
@@ -21,6 +21,7 @@
 import java.util.concurrent.Executor;
 import java.util.stream.Collectors;
 
+import io.ceresdb.proto.internal.Storage;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -38,7 +39,6 @@
 import io.ceresdb.models.QueryRequest;
 import io.ceresdb.models.Result;
 import io.ceresdb.options.QueryOptions;
-import io.ceresdb.proto.Storage;
 import io.ceresdb.rpc.Context;
 import io.ceresdb.rpc.Observer;
 import com.codahale.metrics.Histogram;
diff --git a/ceresdb-protocol/src/main/java/io/ceresdb/RouterClient.java b/ceresdb-protocol/src/main/java/io/ceresdb/RouterClient.java
index 538cf73..374d0b3 100644
--- a/ceresdb-protocol/src/main/java/io/ceresdb/RouterClient.java
+++ b/ceresdb-protocol/src/main/java/io/ceresdb/RouterClient.java
@@ -32,6 +32,7 @@
 import java.util.concurrent.TimeoutException;
 import java.util.stream.Collectors;
 
+import io.ceresdb.proto.internal.Storage;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -47,7 +48,6 @@
 import io.ceresdb.common.util.TopKSelector;
 import io.ceresdb.errors.RouteTableException;
 import io.ceresdb.options.RouterOptions;
-import io.ceresdb.proto.Storage;
 import io.ceresdb.rpc.Context;
 import io.ceresdb.rpc.Observer;
 import io.ceresdb.rpc.RpcClient;
diff --git a/ceresdb-protocol/src/main/java/io/ceresdb/RpcServiceRegister.java b/ceresdb-protocol/src/main/java/io/ceresdb/RpcServiceRegister.java
index 1d22cb8..f2c5dbf 100644
--- a/ceresdb-protocol/src/main/java/io/ceresdb/RpcServiceRegister.java
+++ b/ceresdb-protocol/src/main/java/io/ceresdb/RpcServiceRegister.java
@@ -18,7 +18,7 @@
 
 import io.ceresdb.common.OptKeys;
 import io.ceresdb.common.util.SystemPropertyUtil;
-import io.ceresdb.proto.Storage;
+import io.ceresdb.proto.internal.Storage;
 import io.ceresdb.rpc.MethodDescriptor;
 import io.ceresdb.rpc.RpcFactoryProvider;
 
diff --git a/ceresdb-protocol/src/main/java/io/ceresdb/Utils.java b/ceresdb-protocol/src/main/java/io/ceresdb/Utils.java
index c2fa64a..cbd3803 100644
--- a/ceresdb-protocol/src/main/java/io/ceresdb/Utils.java
+++ b/ceresdb-protocol/src/main/java/io/ceresdb/Utils.java
@@ -53,8 +53,8 @@
 import io.ceresdb.models.TagValue;
 import io.ceresdb.models.Value;
 import io.ceresdb.models.WriteOk;
-import io.ceresdb.proto.Common;
-import io.ceresdb.proto.Storage;
+import io.ceresdb.proto.internal.Common;
+import io.ceresdb.proto.internal.Storage;
 import io.ceresdb.rpc.Observer;
 import com.google.protobuf.ByteStringHelper;
 
diff --git a/ceresdb-protocol/src/main/java/io/ceresdb/WriteClient.java b/ceresdb-protocol/src/main/java/io/ceresdb/WriteClient.java
index 7e74785..0861da0 100644
--- a/ceresdb-protocol/src/main/java/io/ceresdb/WriteClient.java
+++ b/ceresdb-protocol/src/main/java/io/ceresdb/WriteClient.java
@@ -49,7 +49,7 @@
 import io.ceresdb.models.Value;
 import io.ceresdb.models.WriteOk;
 import io.ceresdb.options.WriteOptions;
-import io.ceresdb.proto.Storage;
+import io.ceresdb.proto.internal.Storage;
 import io.ceresdb.rpc.Context;
 import io.ceresdb.rpc.Observer;
 import com.codahale.metrics.Histogram;
diff --git a/ceresdb-protocol/src/main/java/io/ceresdb/proto/Common.java b/ceresdb-protocol/src/main/java/io/ceresdb/proto/Common.java
deleted file mode 100644
index 3ba8b3d..0000000
--- a/ceresdb-protocol/src/main/java/io/ceresdb/proto/Common.java
+++ /dev/null
@@ -1,704 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: common.proto
-
-package io.ceresdb.proto;
-
-public final class Common {
-  private Common() {}
-  public static void registerAllExtensions(
-      com.google.protobuf.ExtensionRegistryLite registry) {
-  }
-
-  public static void registerAllExtensions(
-      com.google.protobuf.ExtensionRegistry registry) {
-    registerAllExtensions(
-        (com.google.protobuf.ExtensionRegistryLite) registry);
-  }
-  public interface ResponseHeaderOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:storage.ResponseHeader)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>uint32 code = 1;</code>
-     * @return The code.
-     */
-    int getCode();
-
-    /**
-     * <code>string error = 2;</code>
-     * @return The error.
-     */
-    java.lang.String getError();
-    /**
-     * <code>string error = 2;</code>
-     * @return The bytes for error.
-     */
-    com.google.protobuf.ByteString
-        getErrorBytes();
-  }
-  /**
-   * Protobuf type {@code storage.ResponseHeader}
-   */
-  public static final class ResponseHeader extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:storage.ResponseHeader)
-      ResponseHeaderOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use ResponseHeader.newBuilder() to construct.
-    private ResponseHeader(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private ResponseHeader() {
-      error_ = "";
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new ResponseHeader();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private ResponseHeader(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      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;
-            case 8: {
-
-              code_ = input.readUInt32();
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              error_ = s;
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (com.google.protobuf.UninitializedMessageException e) {
-        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.ceresdb.proto.Common.internal_static_storage_ResponseHeader_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.ceresdb.proto.Common.internal_static_storage_ResponseHeader_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.ceresdb.proto.Common.ResponseHeader.class, io.ceresdb.proto.Common.ResponseHeader.Builder.class);
-    }
-
-    public static final int CODE_FIELD_NUMBER = 1;
-    private int code_;
-    /**
-     * <code>uint32 code = 1;</code>
-     * @return The code.
-     */
-    @java.lang.Override
-    public int getCode() {
-      return code_;
-    }
-
-    public static final int ERROR_FIELD_NUMBER = 2;
-    private volatile java.lang.Object error_;
-    /**
-     * <code>string error = 2;</code>
-     * @return The error.
-     */
-    @java.lang.Override
-    public java.lang.String getError() {
-      java.lang.Object ref = error_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        error_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string error = 2;</code>
-     * @return The bytes for error.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getErrorBytes() {
-      java.lang.Object ref = error_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        error_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (code_ != 0) {
-        output.writeUInt32(1, code_);
-      }
-      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(error_)) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, error_);
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (code_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(1, code_);
-      }
-      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(error_)) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, error_);
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof io.ceresdb.proto.Common.ResponseHeader)) {
-        return super.equals(obj);
-      }
-      io.ceresdb.proto.Common.ResponseHeader other = (io.ceresdb.proto.Common.ResponseHeader) obj;
-
-      if (getCode()
-          != other.getCode()) return false;
-      if (!getError()
-          .equals(other.getError())) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + CODE_FIELD_NUMBER;
-      hash = (53 * hash) + getCode();
-      hash = (37 * hash) + ERROR_FIELD_NUMBER;
-      hash = (53 * hash) + getError().hashCode();
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static io.ceresdb.proto.Common.ResponseHeader parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Common.ResponseHeader parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Common.ResponseHeader parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Common.ResponseHeader parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Common.ResponseHeader parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Common.ResponseHeader parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Common.ResponseHeader parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Common.ResponseHeader parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Common.ResponseHeader parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Common.ResponseHeader parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Common.ResponseHeader parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Common.ResponseHeader parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(io.ceresdb.proto.Common.ResponseHeader prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code storage.ResponseHeader}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:storage.ResponseHeader)
-        io.ceresdb.proto.Common.ResponseHeaderOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.ceresdb.proto.Common.internal_static_storage_ResponseHeader_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.ceresdb.proto.Common.internal_static_storage_ResponseHeader_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.ceresdb.proto.Common.ResponseHeader.class, io.ceresdb.proto.Common.ResponseHeader.Builder.class);
-      }
-
-      // Construct using io.ceresdb.proto.Common.ResponseHeader.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        code_ = 0;
-
-        error_ = "";
-
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.ceresdb.proto.Common.internal_static_storage_ResponseHeader_descriptor;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Common.ResponseHeader getDefaultInstanceForType() {
-        return io.ceresdb.proto.Common.ResponseHeader.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Common.ResponseHeader build() {
-        io.ceresdb.proto.Common.ResponseHeader result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Common.ResponseHeader buildPartial() {
-        io.ceresdb.proto.Common.ResponseHeader result = new io.ceresdb.proto.Common.ResponseHeader(this);
-        result.code_ = code_;
-        result.error_ = error_;
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.ceresdb.proto.Common.ResponseHeader) {
-          return mergeFrom((io.ceresdb.proto.Common.ResponseHeader)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.ceresdb.proto.Common.ResponseHeader other) {
-        if (other == io.ceresdb.proto.Common.ResponseHeader.getDefaultInstance()) return this;
-        if (other.getCode() != 0) {
-          setCode(other.getCode());
-        }
-        if (!other.getError().isEmpty()) {
-          error_ = other.error_;
-          onChanged();
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.ceresdb.proto.Common.ResponseHeader parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.ceresdb.proto.Common.ResponseHeader) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private int code_ ;
-      /**
-       * <code>uint32 code = 1;</code>
-       * @return The code.
-       */
-      @java.lang.Override
-      public int getCode() {
-        return code_;
-      }
-      /**
-       * <code>uint32 code = 1;</code>
-       * @param value The code to set.
-       * @return This builder for chaining.
-       */
-      public Builder setCode(int value) {
-        
-        code_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 code = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearCode() {
-        
-        code_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private java.lang.Object error_ = "";
-      /**
-       * <code>string error = 2;</code>
-       * @return The error.
-       */
-      public java.lang.String getError() {
-        java.lang.Object ref = error_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          error_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string error = 2;</code>
-       * @return The bytes for error.
-       */
-      public com.google.protobuf.ByteString
-          getErrorBytes() {
-        java.lang.Object ref = error_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          error_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string error = 2;</code>
-       * @param value The error to set.
-       * @return This builder for chaining.
-       */
-      public Builder setError(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        error_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string error = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearError() {
-        
-        error_ = getDefaultInstance().getError();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string error = 2;</code>
-       * @param value The bytes for error to set.
-       * @return This builder for chaining.
-       */
-      public Builder setErrorBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        error_ = value;
-        onChanged();
-        return this;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:storage.ResponseHeader)
-    }
-
-    // @@protoc_insertion_point(class_scope:storage.ResponseHeader)
-    private static final io.ceresdb.proto.Common.ResponseHeader DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new io.ceresdb.proto.Common.ResponseHeader();
-    }
-
-    public static io.ceresdb.proto.Common.ResponseHeader getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<ResponseHeader>
-        PARSER = new com.google.protobuf.AbstractParser<ResponseHeader>() {
-      @java.lang.Override
-      public ResponseHeader parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ResponseHeader(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<ResponseHeader> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<ResponseHeader> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public io.ceresdb.proto.Common.ResponseHeader getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_storage_ResponseHeader_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_storage_ResponseHeader_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\014common.proto\022\007storage\"-\n\016ResponseHeade" +
-      "r\022\014\n\004code\030\001 \001(\r\022\r\n\005error\030\002 \001(\tB\032\n\020io.cer" +
-      "esdb.protoB\006Commonb\006proto3"
-    };
-    descriptor = com.google.protobuf.Descriptors.FileDescriptor
-      .internalBuildGeneratedFileFrom(descriptorData,
-        new com.google.protobuf.Descriptors.FileDescriptor[] {
-        });
-    internal_static_storage_ResponseHeader_descriptor =
-      getDescriptor().getMessageTypes().get(0);
-    internal_static_storage_ResponseHeader_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_storage_ResponseHeader_descriptor,
-        new java.lang.String[] { "Code", "Error", });
-  }
-
-  // @@protoc_insertion_point(outer_class_scope)
-}
diff --git a/ceresdb-protocol/src/main/java/io/ceresdb/proto/Storage.java b/ceresdb-protocol/src/main/java/io/ceresdb/proto/Storage.java
deleted file mode 100644
index c67d004..0000000
--- a/ceresdb-protocol/src/main/java/io/ceresdb/proto/Storage.java
+++ /dev/null
@@ -1,13739 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: storage.proto
-
-package io.ceresdb.proto;
-
-public final class Storage {
-  private Storage() {}
-  public static void registerAllExtensions(
-      com.google.protobuf.ExtensionRegistryLite registry) {
-  }
-
-  public static void registerAllExtensions(
-      com.google.protobuf.ExtensionRegistry registry) {
-    registerAllExtensions(
-        (com.google.protobuf.ExtensionRegistryLite) registry);
-  }
-  public interface RouteRequestOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:storage.RouteRequest)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>repeated string metrics = 1;</code>
-     * @return A list containing the metrics.
-     */
-    java.util.List<java.lang.String>
-        getMetricsList();
-    /**
-     * <code>repeated string metrics = 1;</code>
-     * @return The count of metrics.
-     */
-    int getMetricsCount();
-    /**
-     * <code>repeated string metrics = 1;</code>
-     * @param index The index of the element to return.
-     * @return The metrics at the given index.
-     */
-    java.lang.String getMetrics(int index);
-    /**
-     * <code>repeated string metrics = 1;</code>
-     * @param index The index of the value to return.
-     * @return The bytes of the metrics at the given index.
-     */
-    com.google.protobuf.ByteString
-        getMetricsBytes(int index);
-  }
-  /**
-   * Protobuf type {@code storage.RouteRequest}
-   */
-  public static final class RouteRequest extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:storage.RouteRequest)
-      RouteRequestOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use RouteRequest.newBuilder() to construct.
-    private RouteRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private RouteRequest() {
-      metrics_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new RouteRequest();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private RouteRequest(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      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;
-            case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                metrics_ = new com.google.protobuf.LazyStringArrayList();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              metrics_.add(s);
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (com.google.protobuf.UninitializedMessageException e) {
-        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          metrics_ = metrics_.getUnmodifiableView();
-        }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.ceresdb.proto.Storage.internal_static_storage_RouteRequest_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.ceresdb.proto.Storage.internal_static_storage_RouteRequest_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.ceresdb.proto.Storage.RouteRequest.class, io.ceresdb.proto.Storage.RouteRequest.Builder.class);
-    }
-
-    public static final int METRICS_FIELD_NUMBER = 1;
-    private com.google.protobuf.LazyStringList metrics_;
-    /**
-     * <code>repeated string metrics = 1;</code>
-     * @return A list containing the metrics.
-     */
-    public com.google.protobuf.ProtocolStringList
-        getMetricsList() {
-      return metrics_;
-    }
-    /**
-     * <code>repeated string metrics = 1;</code>
-     * @return The count of metrics.
-     */
-    public int getMetricsCount() {
-      return metrics_.size();
-    }
-    /**
-     * <code>repeated string metrics = 1;</code>
-     * @param index The index of the element to return.
-     * @return The metrics at the given index.
-     */
-    public java.lang.String getMetrics(int index) {
-      return metrics_.get(index);
-    }
-    /**
-     * <code>repeated string metrics = 1;</code>
-     * @param index The index of the value to return.
-     * @return The bytes of the metrics at the given index.
-     */
-    public com.google.protobuf.ByteString
-        getMetricsBytes(int index) {
-      return metrics_.getByteString(index);
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      for (int i = 0; i < metrics_.size(); i++) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, metrics_.getRaw(i));
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      {
-        int dataSize = 0;
-        for (int i = 0; i < metrics_.size(); i++) {
-          dataSize += computeStringSizeNoTag(metrics_.getRaw(i));
-        }
-        size += dataSize;
-        size += 1 * getMetricsList().size();
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof io.ceresdb.proto.Storage.RouteRequest)) {
-        return super.equals(obj);
-      }
-      io.ceresdb.proto.Storage.RouteRequest other = (io.ceresdb.proto.Storage.RouteRequest) obj;
-
-      if (!getMetricsList()
-          .equals(other.getMetricsList())) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (getMetricsCount() > 0) {
-        hash = (37 * hash) + METRICS_FIELD_NUMBER;
-        hash = (53 * hash) + getMetricsList().hashCode();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static io.ceresdb.proto.Storage.RouteRequest parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.RouteRequest parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.RouteRequest parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.RouteRequest parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.RouteRequest parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.RouteRequest parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.RouteRequest parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.RouteRequest parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.RouteRequest parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.RouteRequest parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.RouteRequest parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.RouteRequest parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(io.ceresdb.proto.Storage.RouteRequest prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code storage.RouteRequest}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:storage.RouteRequest)
-        io.ceresdb.proto.Storage.RouteRequestOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.ceresdb.proto.Storage.internal_static_storage_RouteRequest_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.ceresdb.proto.Storage.internal_static_storage_RouteRequest_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.ceresdb.proto.Storage.RouteRequest.class, io.ceresdb.proto.Storage.RouteRequest.Builder.class);
-      }
-
-      // Construct using io.ceresdb.proto.Storage.RouteRequest.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        metrics_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.ceresdb.proto.Storage.internal_static_storage_RouteRequest_descriptor;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.RouteRequest getDefaultInstanceForType() {
-        return io.ceresdb.proto.Storage.RouteRequest.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.RouteRequest build() {
-        io.ceresdb.proto.Storage.RouteRequest result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.RouteRequest buildPartial() {
-        io.ceresdb.proto.Storage.RouteRequest result = new io.ceresdb.proto.Storage.RouteRequest(this);
-        int from_bitField0_ = bitField0_;
-        if (((bitField0_ & 0x00000001) != 0)) {
-          metrics_ = metrics_.getUnmodifiableView();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        }
-        result.metrics_ = metrics_;
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.ceresdb.proto.Storage.RouteRequest) {
-          return mergeFrom((io.ceresdb.proto.Storage.RouteRequest)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.ceresdb.proto.Storage.RouteRequest other) {
-        if (other == io.ceresdb.proto.Storage.RouteRequest.getDefaultInstance()) return this;
-        if (!other.metrics_.isEmpty()) {
-          if (metrics_.isEmpty()) {
-            metrics_ = other.metrics_;
-            bitField0_ = (bitField0_ & ~0x00000001);
-          } else {
-            ensureMetricsIsMutable();
-            metrics_.addAll(other.metrics_);
-          }
-          onChanged();
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.ceresdb.proto.Storage.RouteRequest parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.ceresdb.proto.Storage.RouteRequest) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private com.google.protobuf.LazyStringList metrics_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-      private void ensureMetricsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          metrics_ = new com.google.protobuf.LazyStringArrayList(metrics_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-      /**
-       * <code>repeated string metrics = 1;</code>
-       * @return A list containing the metrics.
-       */
-      public com.google.protobuf.ProtocolStringList
-          getMetricsList() {
-        return metrics_.getUnmodifiableView();
-      }
-      /**
-       * <code>repeated string metrics = 1;</code>
-       * @return The count of metrics.
-       */
-      public int getMetricsCount() {
-        return metrics_.size();
-      }
-      /**
-       * <code>repeated string metrics = 1;</code>
-       * @param index The index of the element to return.
-       * @return The metrics at the given index.
-       */
-      public java.lang.String getMetrics(int index) {
-        return metrics_.get(index);
-      }
-      /**
-       * <code>repeated string metrics = 1;</code>
-       * @param index The index of the value to return.
-       * @return The bytes of the metrics at the given index.
-       */
-      public com.google.protobuf.ByteString
-          getMetricsBytes(int index) {
-        return metrics_.getByteString(index);
-      }
-      /**
-       * <code>repeated string metrics = 1;</code>
-       * @param index The index to set the value at.
-       * @param value The metrics to set.
-       * @return This builder for chaining.
-       */
-      public Builder setMetrics(
-          int index, java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureMetricsIsMutable();
-        metrics_.set(index, value);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated string metrics = 1;</code>
-       * @param value The metrics to add.
-       * @return This builder for chaining.
-       */
-      public Builder addMetrics(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureMetricsIsMutable();
-        metrics_.add(value);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated string metrics = 1;</code>
-       * @param values The metrics to add.
-       * @return This builder for chaining.
-       */
-      public Builder addAllMetrics(
-          java.lang.Iterable<java.lang.String> values) {
-        ensureMetricsIsMutable();
-        com.google.protobuf.AbstractMessageLite.Builder.addAll(
-            values, metrics_);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated string metrics = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearMetrics() {
-        metrics_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated string metrics = 1;</code>
-       * @param value The bytes of the metrics to add.
-       * @return This builder for chaining.
-       */
-      public Builder addMetricsBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        ensureMetricsIsMutable();
-        metrics_.add(value);
-        onChanged();
-        return this;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:storage.RouteRequest)
-    }
-
-    // @@protoc_insertion_point(class_scope:storage.RouteRequest)
-    private static final io.ceresdb.proto.Storage.RouteRequest DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new io.ceresdb.proto.Storage.RouteRequest();
-    }
-
-    public static io.ceresdb.proto.Storage.RouteRequest getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<RouteRequest>
-        PARSER = new com.google.protobuf.AbstractParser<RouteRequest>() {
-      @java.lang.Override
-      public RouteRequest parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new RouteRequest(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<RouteRequest> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<RouteRequest> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.RouteRequest getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface EndpointOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:storage.Endpoint)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>string ip = 1;</code>
-     * @return The ip.
-     */
-    java.lang.String getIp();
-    /**
-     * <code>string ip = 1;</code>
-     * @return The bytes for ip.
-     */
-    com.google.protobuf.ByteString
-        getIpBytes();
-
-    /**
-     * <code>uint32 port = 2;</code>
-     * @return The port.
-     */
-    int getPort();
-  }
-  /**
-   * Protobuf type {@code storage.Endpoint}
-   */
-  public static final class Endpoint extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:storage.Endpoint)
-      EndpointOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use Endpoint.newBuilder() to construct.
-    private Endpoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private Endpoint() {
-      ip_ = "";
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new Endpoint();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private Endpoint(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      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;
-            case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              ip_ = s;
-              break;
-            }
-            case 16: {
-
-              port_ = input.readUInt32();
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (com.google.protobuf.UninitializedMessageException e) {
-        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.ceresdb.proto.Storage.internal_static_storage_Endpoint_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.ceresdb.proto.Storage.internal_static_storage_Endpoint_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.ceresdb.proto.Storage.Endpoint.class, io.ceresdb.proto.Storage.Endpoint.Builder.class);
-    }
-
-    public static final int IP_FIELD_NUMBER = 1;
-    private volatile java.lang.Object ip_;
-    /**
-     * <code>string ip = 1;</code>
-     * @return The ip.
-     */
-    @java.lang.Override
-    public java.lang.String getIp() {
-      java.lang.Object ref = ip_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        ip_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string ip = 1;</code>
-     * @return The bytes for ip.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getIpBytes() {
-      java.lang.Object ref = ip_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        ip_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-
-    public static final int PORT_FIELD_NUMBER = 2;
-    private int port_;
-    /**
-     * <code>uint32 port = 2;</code>
-     * @return The port.
-     */
-    @java.lang.Override
-    public int getPort() {
-      return port_;
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(ip_)) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, ip_);
-      }
-      if (port_ != 0) {
-        output.writeUInt32(2, port_);
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(ip_)) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, ip_);
-      }
-      if (port_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(2, port_);
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof io.ceresdb.proto.Storage.Endpoint)) {
-        return super.equals(obj);
-      }
-      io.ceresdb.proto.Storage.Endpoint other = (io.ceresdb.proto.Storage.Endpoint) obj;
-
-      if (!getIp()
-          .equals(other.getIp())) return false;
-      if (getPort()
-          != other.getPort()) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + IP_FIELD_NUMBER;
-      hash = (53 * hash) + getIp().hashCode();
-      hash = (37 * hash) + PORT_FIELD_NUMBER;
-      hash = (53 * hash) + getPort();
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static io.ceresdb.proto.Storage.Endpoint parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.Endpoint parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Endpoint parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.Endpoint parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Endpoint parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.Endpoint parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Endpoint parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.Endpoint parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Endpoint parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.Endpoint parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Endpoint parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.Endpoint parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(io.ceresdb.proto.Storage.Endpoint prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code storage.Endpoint}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:storage.Endpoint)
-        io.ceresdb.proto.Storage.EndpointOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.ceresdb.proto.Storage.internal_static_storage_Endpoint_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.ceresdb.proto.Storage.internal_static_storage_Endpoint_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.ceresdb.proto.Storage.Endpoint.class, io.ceresdb.proto.Storage.Endpoint.Builder.class);
-      }
-
-      // Construct using io.ceresdb.proto.Storage.Endpoint.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        ip_ = "";
-
-        port_ = 0;
-
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.ceresdb.proto.Storage.internal_static_storage_Endpoint_descriptor;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.Endpoint getDefaultInstanceForType() {
-        return io.ceresdb.proto.Storage.Endpoint.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.Endpoint build() {
-        io.ceresdb.proto.Storage.Endpoint result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.Endpoint buildPartial() {
-        io.ceresdb.proto.Storage.Endpoint result = new io.ceresdb.proto.Storage.Endpoint(this);
-        result.ip_ = ip_;
-        result.port_ = port_;
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.ceresdb.proto.Storage.Endpoint) {
-          return mergeFrom((io.ceresdb.proto.Storage.Endpoint)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.ceresdb.proto.Storage.Endpoint other) {
-        if (other == io.ceresdb.proto.Storage.Endpoint.getDefaultInstance()) return this;
-        if (!other.getIp().isEmpty()) {
-          ip_ = other.ip_;
-          onChanged();
-        }
-        if (other.getPort() != 0) {
-          setPort(other.getPort());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.ceresdb.proto.Storage.Endpoint parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.ceresdb.proto.Storage.Endpoint) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private java.lang.Object ip_ = "";
-      /**
-       * <code>string ip = 1;</code>
-       * @return The ip.
-       */
-      public java.lang.String getIp() {
-        java.lang.Object ref = ip_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          ip_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string ip = 1;</code>
-       * @return The bytes for ip.
-       */
-      public com.google.protobuf.ByteString
-          getIpBytes() {
-        java.lang.Object ref = ip_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          ip_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string ip = 1;</code>
-       * @param value The ip to set.
-       * @return This builder for chaining.
-       */
-      public Builder setIp(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        ip_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string ip = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearIp() {
-        
-        ip_ = getDefaultInstance().getIp();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string ip = 1;</code>
-       * @param value The bytes for ip to set.
-       * @return This builder for chaining.
-       */
-      public Builder setIpBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        ip_ = value;
-        onChanged();
-        return this;
-      }
-
-      private int port_ ;
-      /**
-       * <code>uint32 port = 2;</code>
-       * @return The port.
-       */
-      @java.lang.Override
-      public int getPort() {
-        return port_;
-      }
-      /**
-       * <code>uint32 port = 2;</code>
-       * @param value The port to set.
-       * @return This builder for chaining.
-       */
-      public Builder setPort(int value) {
-        
-        port_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 port = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearPort() {
-        
-        port_ = 0;
-        onChanged();
-        return this;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:storage.Endpoint)
-    }
-
-    // @@protoc_insertion_point(class_scope:storage.Endpoint)
-    private static final io.ceresdb.proto.Storage.Endpoint DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new io.ceresdb.proto.Storage.Endpoint();
-    }
-
-    public static io.ceresdb.proto.Storage.Endpoint getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<Endpoint>
-        PARSER = new com.google.protobuf.AbstractParser<Endpoint>() {
-      @java.lang.Override
-      public Endpoint parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Endpoint(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<Endpoint> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<Endpoint> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.Endpoint getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface RouteOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:storage.Route)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>string metric = 1;</code>
-     * @return The metric.
-     */
-    java.lang.String getMetric();
-    /**
-     * <code>string metric = 1;</code>
-     * @return The bytes for metric.
-     */
-    com.google.protobuf.ByteString
-        getMetricBytes();
-
-    /**
-     * <code>.storage.Endpoint endpoint = 2;</code>
-     * @return Whether the endpoint field is set.
-     */
-    boolean hasEndpoint();
-    /**
-     * <code>.storage.Endpoint endpoint = 2;</code>
-     * @return The endpoint.
-     */
-    io.ceresdb.proto.Storage.Endpoint getEndpoint();
-    /**
-     * <code>.storage.Endpoint endpoint = 2;</code>
-     */
-    io.ceresdb.proto.Storage.EndpointOrBuilder getEndpointOrBuilder();
-
-    /**
-     * <code>bytes ext = 3;</code>
-     * @return The ext.
-     */
-    com.google.protobuf.ByteString getExt();
-  }
-  /**
-   * Protobuf type {@code storage.Route}
-   */
-  public static final class Route extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:storage.Route)
-      RouteOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use Route.newBuilder() to construct.
-    private Route(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private Route() {
-      metric_ = "";
-      ext_ = com.google.protobuf.ByteString.EMPTY;
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new Route();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private Route(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      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;
-            case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              metric_ = s;
-              break;
-            }
-            case 18: {
-              io.ceresdb.proto.Storage.Endpoint.Builder subBuilder = null;
-              if (endpoint_ != null) {
-                subBuilder = endpoint_.toBuilder();
-              }
-              endpoint_ = input.readMessage(io.ceresdb.proto.Storage.Endpoint.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(endpoint_);
-                endpoint_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 26: {
-
-              ext_ = input.readBytes();
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (com.google.protobuf.UninitializedMessageException e) {
-        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.ceresdb.proto.Storage.internal_static_storage_Route_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.ceresdb.proto.Storage.internal_static_storage_Route_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.ceresdb.proto.Storage.Route.class, io.ceresdb.proto.Storage.Route.Builder.class);
-    }
-
-    public static final int METRIC_FIELD_NUMBER = 1;
-    private volatile java.lang.Object metric_;
-    /**
-     * <code>string metric = 1;</code>
-     * @return The metric.
-     */
-    @java.lang.Override
-    public java.lang.String getMetric() {
-      java.lang.Object ref = metric_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        metric_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string metric = 1;</code>
-     * @return The bytes for metric.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getMetricBytes() {
-      java.lang.Object ref = metric_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        metric_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-
-    public static final int ENDPOINT_FIELD_NUMBER = 2;
-    private io.ceresdb.proto.Storage.Endpoint endpoint_;
-    /**
-     * <code>.storage.Endpoint endpoint = 2;</code>
-     * @return Whether the endpoint field is set.
-     */
-    @java.lang.Override
-    public boolean hasEndpoint() {
-      return endpoint_ != null;
-    }
-    /**
-     * <code>.storage.Endpoint endpoint = 2;</code>
-     * @return The endpoint.
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.Endpoint getEndpoint() {
-      return endpoint_ == null ? io.ceresdb.proto.Storage.Endpoint.getDefaultInstance() : endpoint_;
-    }
-    /**
-     * <code>.storage.Endpoint endpoint = 2;</code>
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.EndpointOrBuilder getEndpointOrBuilder() {
-      return getEndpoint();
-    }
-
-    public static final int EXT_FIELD_NUMBER = 3;
-    private com.google.protobuf.ByteString ext_;
-    /**
-     * <code>bytes ext = 3;</code>
-     * @return The ext.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString getExt() {
-      return ext_;
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(metric_)) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, metric_);
-      }
-      if (endpoint_ != null) {
-        output.writeMessage(2, getEndpoint());
-      }
-      if (!ext_.isEmpty()) {
-        output.writeBytes(3, ext_);
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(metric_)) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, metric_);
-      }
-      if (endpoint_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getEndpoint());
-      }
-      if (!ext_.isEmpty()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(3, ext_);
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof io.ceresdb.proto.Storage.Route)) {
-        return super.equals(obj);
-      }
-      io.ceresdb.proto.Storage.Route other = (io.ceresdb.proto.Storage.Route) obj;
-
-      if (!getMetric()
-          .equals(other.getMetric())) return false;
-      if (hasEndpoint() != other.hasEndpoint()) return false;
-      if (hasEndpoint()) {
-        if (!getEndpoint()
-            .equals(other.getEndpoint())) return false;
-      }
-      if (!getExt()
-          .equals(other.getExt())) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + METRIC_FIELD_NUMBER;
-      hash = (53 * hash) + getMetric().hashCode();
-      if (hasEndpoint()) {
-        hash = (37 * hash) + ENDPOINT_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpoint().hashCode();
-      }
-      hash = (37 * hash) + EXT_FIELD_NUMBER;
-      hash = (53 * hash) + getExt().hashCode();
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static io.ceresdb.proto.Storage.Route parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.Route parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Route parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.Route parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Route parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.Route parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Route parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.Route parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Route parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.Route parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Route parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.Route parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(io.ceresdb.proto.Storage.Route prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code storage.Route}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:storage.Route)
-        io.ceresdb.proto.Storage.RouteOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.ceresdb.proto.Storage.internal_static_storage_Route_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.ceresdb.proto.Storage.internal_static_storage_Route_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.ceresdb.proto.Storage.Route.class, io.ceresdb.proto.Storage.Route.Builder.class);
-      }
-
-      // Construct using io.ceresdb.proto.Storage.Route.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        metric_ = "";
-
-        if (endpointBuilder_ == null) {
-          endpoint_ = null;
-        } else {
-          endpoint_ = null;
-          endpointBuilder_ = null;
-        }
-        ext_ = com.google.protobuf.ByteString.EMPTY;
-
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.ceresdb.proto.Storage.internal_static_storage_Route_descriptor;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.Route getDefaultInstanceForType() {
-        return io.ceresdb.proto.Storage.Route.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.Route build() {
-        io.ceresdb.proto.Storage.Route result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.Route buildPartial() {
-        io.ceresdb.proto.Storage.Route result = new io.ceresdb.proto.Storage.Route(this);
-        result.metric_ = metric_;
-        if (endpointBuilder_ == null) {
-          result.endpoint_ = endpoint_;
-        } else {
-          result.endpoint_ = endpointBuilder_.build();
-        }
-        result.ext_ = ext_;
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.ceresdb.proto.Storage.Route) {
-          return mergeFrom((io.ceresdb.proto.Storage.Route)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.ceresdb.proto.Storage.Route other) {
-        if (other == io.ceresdb.proto.Storage.Route.getDefaultInstance()) return this;
-        if (!other.getMetric().isEmpty()) {
-          metric_ = other.metric_;
-          onChanged();
-        }
-        if (other.hasEndpoint()) {
-          mergeEndpoint(other.getEndpoint());
-        }
-        if (other.getExt() != com.google.protobuf.ByteString.EMPTY) {
-          setExt(other.getExt());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.ceresdb.proto.Storage.Route parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.ceresdb.proto.Storage.Route) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private java.lang.Object metric_ = "";
-      /**
-       * <code>string metric = 1;</code>
-       * @return The metric.
-       */
-      public java.lang.String getMetric() {
-        java.lang.Object ref = metric_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          metric_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string metric = 1;</code>
-       * @return The bytes for metric.
-       */
-      public com.google.protobuf.ByteString
-          getMetricBytes() {
-        java.lang.Object ref = metric_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          metric_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string metric = 1;</code>
-       * @param value The metric to set.
-       * @return This builder for chaining.
-       */
-      public Builder setMetric(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        metric_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string metric = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearMetric() {
-        
-        metric_ = getDefaultInstance().getMetric();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string metric = 1;</code>
-       * @param value The bytes for metric to set.
-       * @return This builder for chaining.
-       */
-      public Builder setMetricBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        metric_ = value;
-        onChanged();
-        return this;
-      }
-
-      private io.ceresdb.proto.Storage.Endpoint endpoint_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          io.ceresdb.proto.Storage.Endpoint, io.ceresdb.proto.Storage.Endpoint.Builder, io.ceresdb.proto.Storage.EndpointOrBuilder> endpointBuilder_;
-      /**
-       * <code>.storage.Endpoint endpoint = 2;</code>
-       * @return Whether the endpoint field is set.
-       */
-      public boolean hasEndpoint() {
-        return endpointBuilder_ != null || endpoint_ != null;
-      }
-      /**
-       * <code>.storage.Endpoint endpoint = 2;</code>
-       * @return The endpoint.
-       */
-      public io.ceresdb.proto.Storage.Endpoint getEndpoint() {
-        if (endpointBuilder_ == null) {
-          return endpoint_ == null ? io.ceresdb.proto.Storage.Endpoint.getDefaultInstance() : endpoint_;
-        } else {
-          return endpointBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.storage.Endpoint endpoint = 2;</code>
-       */
-      public Builder setEndpoint(io.ceresdb.proto.Storage.Endpoint value) {
-        if (endpointBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endpoint_ = value;
-          onChanged();
-        } else {
-          endpointBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.Endpoint endpoint = 2;</code>
-       */
-      public Builder setEndpoint(
-          io.ceresdb.proto.Storage.Endpoint.Builder builderForValue) {
-        if (endpointBuilder_ == null) {
-          endpoint_ = builderForValue.build();
-          onChanged();
-        } else {
-          endpointBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.Endpoint endpoint = 2;</code>
-       */
-      public Builder mergeEndpoint(io.ceresdb.proto.Storage.Endpoint value) {
-        if (endpointBuilder_ == null) {
-          if (endpoint_ != null) {
-            endpoint_ =
-              io.ceresdb.proto.Storage.Endpoint.newBuilder(endpoint_).mergeFrom(value).buildPartial();
-          } else {
-            endpoint_ = value;
-          }
-          onChanged();
-        } else {
-          endpointBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.Endpoint endpoint = 2;</code>
-       */
-      public Builder clearEndpoint() {
-        if (endpointBuilder_ == null) {
-          endpoint_ = null;
-          onChanged();
-        } else {
-          endpoint_ = null;
-          endpointBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.Endpoint endpoint = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.Endpoint.Builder getEndpointBuilder() {
-        
-        onChanged();
-        return getEndpointFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.storage.Endpoint endpoint = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.EndpointOrBuilder getEndpointOrBuilder() {
-        if (endpointBuilder_ != null) {
-          return endpointBuilder_.getMessageOrBuilder();
-        } else {
-          return endpoint_ == null ?
-              io.ceresdb.proto.Storage.Endpoint.getDefaultInstance() : endpoint_;
-        }
-      }
-      /**
-       * <code>.storage.Endpoint endpoint = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          io.ceresdb.proto.Storage.Endpoint, io.ceresdb.proto.Storage.Endpoint.Builder, io.ceresdb.proto.Storage.EndpointOrBuilder> 
-          getEndpointFieldBuilder() {
-        if (endpointBuilder_ == null) {
-          endpointBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              io.ceresdb.proto.Storage.Endpoint, io.ceresdb.proto.Storage.Endpoint.Builder, io.ceresdb.proto.Storage.EndpointOrBuilder>(
-                  getEndpoint(),
-                  getParentForChildren(),
-                  isClean());
-          endpoint_ = null;
-        }
-        return endpointBuilder_;
-      }
-
-      private com.google.protobuf.ByteString ext_ = com.google.protobuf.ByteString.EMPTY;
-      /**
-       * <code>bytes ext = 3;</code>
-       * @return The ext.
-       */
-      @java.lang.Override
-      public com.google.protobuf.ByteString getExt() {
-        return ext_;
-      }
-      /**
-       * <code>bytes ext = 3;</code>
-       * @param value The ext to set.
-       * @return This builder for chaining.
-       */
-      public Builder setExt(com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        ext_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>bytes ext = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearExt() {
-        
-        ext_ = getDefaultInstance().getExt();
-        onChanged();
-        return this;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:storage.Route)
-    }
-
-    // @@protoc_insertion_point(class_scope:storage.Route)
-    private static final io.ceresdb.proto.Storage.Route DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new io.ceresdb.proto.Storage.Route();
-    }
-
-    public static io.ceresdb.proto.Storage.Route getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<Route>
-        PARSER = new com.google.protobuf.AbstractParser<Route>() {
-      @java.lang.Override
-      public Route parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Route(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<Route> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<Route> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.Route getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface RouteResponseOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:storage.RouteResponse)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.storage.ResponseHeader header = 1;</code>
-     * @return Whether the header field is set.
-     */
-    boolean hasHeader();
-    /**
-     * <code>.storage.ResponseHeader header = 1;</code>
-     * @return The header.
-     */
-    io.ceresdb.proto.Common.ResponseHeader getHeader();
-    /**
-     * <code>.storage.ResponseHeader header = 1;</code>
-     */
-    io.ceresdb.proto.Common.ResponseHeaderOrBuilder getHeaderOrBuilder();
-
-    /**
-     * <code>repeated .storage.Route routes = 2;</code>
-     */
-    java.util.List<io.ceresdb.proto.Storage.Route> 
-        getRoutesList();
-    /**
-     * <code>repeated .storage.Route routes = 2;</code>
-     */
-    io.ceresdb.proto.Storage.Route getRoutes(int index);
-    /**
-     * <code>repeated .storage.Route routes = 2;</code>
-     */
-    int getRoutesCount();
-    /**
-     * <code>repeated .storage.Route routes = 2;</code>
-     */
-    java.util.List<? extends io.ceresdb.proto.Storage.RouteOrBuilder> 
-        getRoutesOrBuilderList();
-    /**
-     * <code>repeated .storage.Route routes = 2;</code>
-     */
-    io.ceresdb.proto.Storage.RouteOrBuilder getRoutesOrBuilder(
-        int index);
-  }
-  /**
-   * Protobuf type {@code storage.RouteResponse}
-   */
-  public static final class RouteResponse extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:storage.RouteResponse)
-      RouteResponseOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use RouteResponse.newBuilder() to construct.
-    private RouteResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private RouteResponse() {
-      routes_ = java.util.Collections.emptyList();
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new RouteResponse();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private RouteResponse(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      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;
-            case 10: {
-              io.ceresdb.proto.Common.ResponseHeader.Builder subBuilder = null;
-              if (header_ != null) {
-                subBuilder = header_.toBuilder();
-              }
-              header_ = input.readMessage(io.ceresdb.proto.Common.ResponseHeader.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(header_);
-                header_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                routes_ = new java.util.ArrayList<io.ceresdb.proto.Storage.Route>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              routes_.add(
-                  input.readMessage(io.ceresdb.proto.Storage.Route.parser(), extensionRegistry));
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (com.google.protobuf.UninitializedMessageException e) {
-        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          routes_ = java.util.Collections.unmodifiableList(routes_);
-        }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.ceresdb.proto.Storage.internal_static_storage_RouteResponse_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.ceresdb.proto.Storage.internal_static_storage_RouteResponse_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.ceresdb.proto.Storage.RouteResponse.class, io.ceresdb.proto.Storage.RouteResponse.Builder.class);
-    }
-
-    public static final int HEADER_FIELD_NUMBER = 1;
-    private io.ceresdb.proto.Common.ResponseHeader header_;
-    /**
-     * <code>.storage.ResponseHeader header = 1;</code>
-     * @return Whether the header field is set.
-     */
-    @java.lang.Override
-    public boolean hasHeader() {
-      return header_ != null;
-    }
-    /**
-     * <code>.storage.ResponseHeader header = 1;</code>
-     * @return The header.
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Common.ResponseHeader getHeader() {
-      return header_ == null ? io.ceresdb.proto.Common.ResponseHeader.getDefaultInstance() : header_;
-    }
-    /**
-     * <code>.storage.ResponseHeader header = 1;</code>
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Common.ResponseHeaderOrBuilder getHeaderOrBuilder() {
-      return getHeader();
-    }
-
-    public static final int ROUTES_FIELD_NUMBER = 2;
-    private java.util.List<io.ceresdb.proto.Storage.Route> routes_;
-    /**
-     * <code>repeated .storage.Route routes = 2;</code>
-     */
-    @java.lang.Override
-    public java.util.List<io.ceresdb.proto.Storage.Route> getRoutesList() {
-      return routes_;
-    }
-    /**
-     * <code>repeated .storage.Route routes = 2;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends io.ceresdb.proto.Storage.RouteOrBuilder> 
-        getRoutesOrBuilderList() {
-      return routes_;
-    }
-    /**
-     * <code>repeated .storage.Route routes = 2;</code>
-     */
-    @java.lang.Override
-    public int getRoutesCount() {
-      return routes_.size();
-    }
-    /**
-     * <code>repeated .storage.Route routes = 2;</code>
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.Route getRoutes(int index) {
-      return routes_.get(index);
-    }
-    /**
-     * <code>repeated .storage.Route routes = 2;</code>
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.RouteOrBuilder getRoutesOrBuilder(
-        int index) {
-      return routes_.get(index);
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (header_ != null) {
-        output.writeMessage(1, getHeader());
-      }
-      for (int i = 0; i < routes_.size(); i++) {
-        output.writeMessage(2, routes_.get(i));
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (header_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getHeader());
-      }
-      for (int i = 0; i < routes_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, routes_.get(i));
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof io.ceresdb.proto.Storage.RouteResponse)) {
-        return super.equals(obj);
-      }
-      io.ceresdb.proto.Storage.RouteResponse other = (io.ceresdb.proto.Storage.RouteResponse) obj;
-
-      if (hasHeader() != other.hasHeader()) return false;
-      if (hasHeader()) {
-        if (!getHeader()
-            .equals(other.getHeader())) return false;
-      }
-      if (!getRoutesList()
-          .equals(other.getRoutesList())) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasHeader()) {
-        hash = (37 * hash) + HEADER_FIELD_NUMBER;
-        hash = (53 * hash) + getHeader().hashCode();
-      }
-      if (getRoutesCount() > 0) {
-        hash = (37 * hash) + ROUTES_FIELD_NUMBER;
-        hash = (53 * hash) + getRoutesList().hashCode();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static io.ceresdb.proto.Storage.RouteResponse parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.RouteResponse parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.RouteResponse parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.RouteResponse parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.RouteResponse parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.RouteResponse parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.RouteResponse parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.RouteResponse parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.RouteResponse parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.RouteResponse parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.RouteResponse parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.RouteResponse parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(io.ceresdb.proto.Storage.RouteResponse prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code storage.RouteResponse}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:storage.RouteResponse)
-        io.ceresdb.proto.Storage.RouteResponseOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.ceresdb.proto.Storage.internal_static_storage_RouteResponse_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.ceresdb.proto.Storage.internal_static_storage_RouteResponse_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.ceresdb.proto.Storage.RouteResponse.class, io.ceresdb.proto.Storage.RouteResponse.Builder.class);
-      }
-
-      // Construct using io.ceresdb.proto.Storage.RouteResponse.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-          getRoutesFieldBuilder();
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (headerBuilder_ == null) {
-          header_ = null;
-        } else {
-          header_ = null;
-          headerBuilder_ = null;
-        }
-        if (routesBuilder_ == null) {
-          routes_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          routesBuilder_.clear();
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.ceresdb.proto.Storage.internal_static_storage_RouteResponse_descriptor;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.RouteResponse getDefaultInstanceForType() {
-        return io.ceresdb.proto.Storage.RouteResponse.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.RouteResponse build() {
-        io.ceresdb.proto.Storage.RouteResponse result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.RouteResponse buildPartial() {
-        io.ceresdb.proto.Storage.RouteResponse result = new io.ceresdb.proto.Storage.RouteResponse(this);
-        int from_bitField0_ = bitField0_;
-        if (headerBuilder_ == null) {
-          result.header_ = header_;
-        } else {
-          result.header_ = headerBuilder_.build();
-        }
-        if (routesBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            routes_ = java.util.Collections.unmodifiableList(routes_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.routes_ = routes_;
-        } else {
-          result.routes_ = routesBuilder_.build();
-        }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.ceresdb.proto.Storage.RouteResponse) {
-          return mergeFrom((io.ceresdb.proto.Storage.RouteResponse)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.ceresdb.proto.Storage.RouteResponse other) {
-        if (other == io.ceresdb.proto.Storage.RouteResponse.getDefaultInstance()) return this;
-        if (other.hasHeader()) {
-          mergeHeader(other.getHeader());
-        }
-        if (routesBuilder_ == null) {
-          if (!other.routes_.isEmpty()) {
-            if (routes_.isEmpty()) {
-              routes_ = other.routes_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureRoutesIsMutable();
-              routes_.addAll(other.routes_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.routes_.isEmpty()) {
-            if (routesBuilder_.isEmpty()) {
-              routesBuilder_.dispose();
-              routesBuilder_ = null;
-              routes_ = other.routes_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              routesBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getRoutesFieldBuilder() : null;
-            } else {
-              routesBuilder_.addAllMessages(other.routes_);
-            }
-          }
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.ceresdb.proto.Storage.RouteResponse parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.ceresdb.proto.Storage.RouteResponse) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private io.ceresdb.proto.Common.ResponseHeader header_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          io.ceresdb.proto.Common.ResponseHeader, io.ceresdb.proto.Common.ResponseHeader.Builder, io.ceresdb.proto.Common.ResponseHeaderOrBuilder> headerBuilder_;
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       * @return Whether the header field is set.
-       */
-      public boolean hasHeader() {
-        return headerBuilder_ != null || header_ != null;
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       * @return The header.
-       */
-      public io.ceresdb.proto.Common.ResponseHeader getHeader() {
-        if (headerBuilder_ == null) {
-          return header_ == null ? io.ceresdb.proto.Common.ResponseHeader.getDefaultInstance() : header_;
-        } else {
-          return headerBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      public Builder setHeader(io.ceresdb.proto.Common.ResponseHeader value) {
-        if (headerBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          header_ = value;
-          onChanged();
-        } else {
-          headerBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      public Builder setHeader(
-          io.ceresdb.proto.Common.ResponseHeader.Builder builderForValue) {
-        if (headerBuilder_ == null) {
-          header_ = builderForValue.build();
-          onChanged();
-        } else {
-          headerBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      public Builder mergeHeader(io.ceresdb.proto.Common.ResponseHeader value) {
-        if (headerBuilder_ == null) {
-          if (header_ != null) {
-            header_ =
-              io.ceresdb.proto.Common.ResponseHeader.newBuilder(header_).mergeFrom(value).buildPartial();
-          } else {
-            header_ = value;
-          }
-          onChanged();
-        } else {
-          headerBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      public Builder clearHeader() {
-        if (headerBuilder_ == null) {
-          header_ = null;
-          onChanged();
-        } else {
-          header_ = null;
-          headerBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      public io.ceresdb.proto.Common.ResponseHeader.Builder getHeaderBuilder() {
-        
-        onChanged();
-        return getHeaderFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      public io.ceresdb.proto.Common.ResponseHeaderOrBuilder getHeaderOrBuilder() {
-        if (headerBuilder_ != null) {
-          return headerBuilder_.getMessageOrBuilder();
-        } else {
-          return header_ == null ?
-              io.ceresdb.proto.Common.ResponseHeader.getDefaultInstance() : header_;
-        }
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          io.ceresdb.proto.Common.ResponseHeader, io.ceresdb.proto.Common.ResponseHeader.Builder, io.ceresdb.proto.Common.ResponseHeaderOrBuilder> 
-          getHeaderFieldBuilder() {
-        if (headerBuilder_ == null) {
-          headerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              io.ceresdb.proto.Common.ResponseHeader, io.ceresdb.proto.Common.ResponseHeader.Builder, io.ceresdb.proto.Common.ResponseHeaderOrBuilder>(
-                  getHeader(),
-                  getParentForChildren(),
-                  isClean());
-          header_ = null;
-        }
-        return headerBuilder_;
-      }
-
-      private java.util.List<io.ceresdb.proto.Storage.Route> routes_ =
-        java.util.Collections.emptyList();
-      private void ensureRoutesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          routes_ = new java.util.ArrayList<io.ceresdb.proto.Storage.Route>(routes_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          io.ceresdb.proto.Storage.Route, io.ceresdb.proto.Storage.Route.Builder, io.ceresdb.proto.Storage.RouteOrBuilder> routesBuilder_;
-
-      /**
-       * <code>repeated .storage.Route routes = 2;</code>
-       */
-      public java.util.List<io.ceresdb.proto.Storage.Route> getRoutesList() {
-        if (routesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(routes_);
-        } else {
-          return routesBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .storage.Route routes = 2;</code>
-       */
-      public int getRoutesCount() {
-        if (routesBuilder_ == null) {
-          return routes_.size();
-        } else {
-          return routesBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .storage.Route routes = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.Route getRoutes(int index) {
-        if (routesBuilder_ == null) {
-          return routes_.get(index);
-        } else {
-          return routesBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .storage.Route routes = 2;</code>
-       */
-      public Builder setRoutes(
-          int index, io.ceresdb.proto.Storage.Route value) {
-        if (routesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureRoutesIsMutable();
-          routes_.set(index, value);
-          onChanged();
-        } else {
-          routesBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Route routes = 2;</code>
-       */
-      public Builder setRoutes(
-          int index, io.ceresdb.proto.Storage.Route.Builder builderForValue) {
-        if (routesBuilder_ == null) {
-          ensureRoutesIsMutable();
-          routes_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          routesBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Route routes = 2;</code>
-       */
-      public Builder addRoutes(io.ceresdb.proto.Storage.Route value) {
-        if (routesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureRoutesIsMutable();
-          routes_.add(value);
-          onChanged();
-        } else {
-          routesBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Route routes = 2;</code>
-       */
-      public Builder addRoutes(
-          int index, io.ceresdb.proto.Storage.Route value) {
-        if (routesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureRoutesIsMutable();
-          routes_.add(index, value);
-          onChanged();
-        } else {
-          routesBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Route routes = 2;</code>
-       */
-      public Builder addRoutes(
-          io.ceresdb.proto.Storage.Route.Builder builderForValue) {
-        if (routesBuilder_ == null) {
-          ensureRoutesIsMutable();
-          routes_.add(builderForValue.build());
-          onChanged();
-        } else {
-          routesBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Route routes = 2;</code>
-       */
-      public Builder addRoutes(
-          int index, io.ceresdb.proto.Storage.Route.Builder builderForValue) {
-        if (routesBuilder_ == null) {
-          ensureRoutesIsMutable();
-          routes_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          routesBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Route routes = 2;</code>
-       */
-      public Builder addAllRoutes(
-          java.lang.Iterable<? extends io.ceresdb.proto.Storage.Route> values) {
-        if (routesBuilder_ == null) {
-          ensureRoutesIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, routes_);
-          onChanged();
-        } else {
-          routesBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Route routes = 2;</code>
-       */
-      public Builder clearRoutes() {
-        if (routesBuilder_ == null) {
-          routes_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          routesBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Route routes = 2;</code>
-       */
-      public Builder removeRoutes(int index) {
-        if (routesBuilder_ == null) {
-          ensureRoutesIsMutable();
-          routes_.remove(index);
-          onChanged();
-        } else {
-          routesBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Route routes = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.Route.Builder getRoutesBuilder(
-          int index) {
-        return getRoutesFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .storage.Route routes = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.RouteOrBuilder getRoutesOrBuilder(
-          int index) {
-        if (routesBuilder_ == null) {
-          return routes_.get(index);  } else {
-          return routesBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .storage.Route routes = 2;</code>
-       */
-      public java.util.List<? extends io.ceresdb.proto.Storage.RouteOrBuilder> 
-           getRoutesOrBuilderList() {
-        if (routesBuilder_ != null) {
-          return routesBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(routes_);
-        }
-      }
-      /**
-       * <code>repeated .storage.Route routes = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.Route.Builder addRoutesBuilder() {
-        return getRoutesFieldBuilder().addBuilder(
-            io.ceresdb.proto.Storage.Route.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .storage.Route routes = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.Route.Builder addRoutesBuilder(
-          int index) {
-        return getRoutesFieldBuilder().addBuilder(
-            index, io.ceresdb.proto.Storage.Route.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .storage.Route routes = 2;</code>
-       */
-      public java.util.List<io.ceresdb.proto.Storage.Route.Builder> 
-           getRoutesBuilderList() {
-        return getRoutesFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          io.ceresdb.proto.Storage.Route, io.ceresdb.proto.Storage.Route.Builder, io.ceresdb.proto.Storage.RouteOrBuilder> 
-          getRoutesFieldBuilder() {
-        if (routesBuilder_ == null) {
-          routesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              io.ceresdb.proto.Storage.Route, io.ceresdb.proto.Storage.Route.Builder, io.ceresdb.proto.Storage.RouteOrBuilder>(
-                  routes_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          routes_ = null;
-        }
-        return routesBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:storage.RouteResponse)
-    }
-
-    // @@protoc_insertion_point(class_scope:storage.RouteResponse)
-    private static final io.ceresdb.proto.Storage.RouteResponse DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new io.ceresdb.proto.Storage.RouteResponse();
-    }
-
-    public static io.ceresdb.proto.Storage.RouteResponse getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<RouteResponse>
-        PARSER = new com.google.protobuf.AbstractParser<RouteResponse>() {
-      @java.lang.Override
-      public RouteResponse parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new RouteResponse(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<RouteResponse> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<RouteResponse> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.RouteResponse getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface ValueOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:storage.Value)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>double float64_value = 1;</code>
-     * @return Whether the float64Value field is set.
-     */
-    boolean hasFloat64Value();
-    /**
-     * <code>double float64_value = 1;</code>
-     * @return The float64Value.
-     */
-    double getFloat64Value();
-
-    /**
-     * <code>string string_value = 2;</code>
-     * @return Whether the stringValue field is set.
-     */
-    boolean hasStringValue();
-    /**
-     * <code>string string_value = 2;</code>
-     * @return The stringValue.
-     */
-    java.lang.String getStringValue();
-    /**
-     * <code>string string_value = 2;</code>
-     * @return The bytes for stringValue.
-     */
-    com.google.protobuf.ByteString
-        getStringValueBytes();
-
-    /**
-     * <code>int64 int64_value = 3;</code>
-     * @return Whether the int64Value field is set.
-     */
-    boolean hasInt64Value();
-    /**
-     * <code>int64 int64_value = 3;</code>
-     * @return The int64Value.
-     */
-    long getInt64Value();
-
-    /**
-     * <code>float float32_value = 4;</code>
-     * @return Whether the float32Value field is set.
-     */
-    boolean hasFloat32Value();
-    /**
-     * <code>float float32_value = 4;</code>
-     * @return The float32Value.
-     */
-    float getFloat32Value();
-
-    /**
-     * <code>int32 int32_value = 5;</code>
-     * @return Whether the int32Value field is set.
-     */
-    boolean hasInt32Value();
-    /**
-     * <code>int32 int32_value = 5;</code>
-     * @return The int32Value.
-     */
-    int getInt32Value();
-
-    /**
-     * <code>int32 int16_value = 6;</code>
-     * @return Whether the int16Value field is set.
-     */
-    boolean hasInt16Value();
-    /**
-     * <code>int32 int16_value = 6;</code>
-     * @return The int16Value.
-     */
-    int getInt16Value();
-
-    /**
-     * <code>int32 int8_value = 7;</code>
-     * @return Whether the int8Value field is set.
-     */
-    boolean hasInt8Value();
-    /**
-     * <code>int32 int8_value = 7;</code>
-     * @return The int8Value.
-     */
-    int getInt8Value();
-
-    /**
-     * <code>bool bool_value = 8;</code>
-     * @return Whether the boolValue field is set.
-     */
-    boolean hasBoolValue();
-    /**
-     * <code>bool bool_value = 8;</code>
-     * @return The boolValue.
-     */
-    boolean getBoolValue();
-
-    /**
-     * <code>uint64 uint64_value = 9;</code>
-     * @return Whether the uint64Value field is set.
-     */
-    boolean hasUint64Value();
-    /**
-     * <code>uint64 uint64_value = 9;</code>
-     * @return The uint64Value.
-     */
-    long getUint64Value();
-
-    /**
-     * <code>uint32 uint32_value = 10;</code>
-     * @return Whether the uint32Value field is set.
-     */
-    boolean hasUint32Value();
-    /**
-     * <code>uint32 uint32_value = 10;</code>
-     * @return The uint32Value.
-     */
-    int getUint32Value();
-
-    /**
-     * <code>uint32 uint16_value = 11;</code>
-     * @return Whether the uint16Value field is set.
-     */
-    boolean hasUint16Value();
-    /**
-     * <code>uint32 uint16_value = 11;</code>
-     * @return The uint16Value.
-     */
-    int getUint16Value();
-
-    /**
-     * <code>uint32 uint8_value = 12;</code>
-     * @return Whether the uint8Value field is set.
-     */
-    boolean hasUint8Value();
-    /**
-     * <code>uint32 uint8_value = 12;</code>
-     * @return The uint8Value.
-     */
-    int getUint8Value();
-
-    /**
-     * <code>int64 timestamp_value = 13;</code>
-     * @return Whether the timestampValue field is set.
-     */
-    boolean hasTimestampValue();
-    /**
-     * <code>int64 timestamp_value = 13;</code>
-     * @return The timestampValue.
-     */
-    long getTimestampValue();
-
-    /**
-     * <code>bytes varbinary_value = 14;</code>
-     * @return Whether the varbinaryValue field is set.
-     */
-    boolean hasVarbinaryValue();
-    /**
-     * <code>bytes varbinary_value = 14;</code>
-     * @return The varbinaryValue.
-     */
-    com.google.protobuf.ByteString getVarbinaryValue();
-
-    public io.ceresdb.proto.Storage.Value.ValueCase getValueCase();
-  }
-  /**
-   * Protobuf type {@code storage.Value}
-   */
-  public static final class Value extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:storage.Value)
-      ValueOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use Value.newBuilder() to construct.
-    private Value(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private Value() {
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new Value();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private Value(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      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;
-            case 9: {
-              value_ = input.readDouble();
-              valueCase_ = 1;
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-              valueCase_ = 2;
-              value_ = s;
-              break;
-            }
-            case 24: {
-              value_ = input.readInt64();
-              valueCase_ = 3;
-              break;
-            }
-            case 37: {
-              value_ = input.readFloat();
-              valueCase_ = 4;
-              break;
-            }
-            case 40: {
-              value_ = input.readInt32();
-              valueCase_ = 5;
-              break;
-            }
-            case 48: {
-              value_ = input.readInt32();
-              valueCase_ = 6;
-              break;
-            }
-            case 56: {
-              value_ = input.readInt32();
-              valueCase_ = 7;
-              break;
-            }
-            case 64: {
-              value_ = input.readBool();
-              valueCase_ = 8;
-              break;
-            }
-            case 72: {
-              value_ = input.readUInt64();
-              valueCase_ = 9;
-              break;
-            }
-            case 80: {
-              value_ = input.readUInt32();
-              valueCase_ = 10;
-              break;
-            }
-            case 88: {
-              value_ = input.readUInt32();
-              valueCase_ = 11;
-              break;
-            }
-            case 96: {
-              value_ = input.readUInt32();
-              valueCase_ = 12;
-              break;
-            }
-            case 104: {
-              value_ = input.readInt64();
-              valueCase_ = 13;
-              break;
-            }
-            case 114: {
-              value_ = input.readBytes();
-              valueCase_ = 14;
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (com.google.protobuf.UninitializedMessageException e) {
-        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.ceresdb.proto.Storage.internal_static_storage_Value_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.ceresdb.proto.Storage.internal_static_storage_Value_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.ceresdb.proto.Storage.Value.class, io.ceresdb.proto.Storage.Value.Builder.class);
-    }
-
-    private int valueCase_ = 0;
-    private java.lang.Object value_;
-    public enum ValueCase
-        implements com.google.protobuf.Internal.EnumLite,
-            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
-      FLOAT64_VALUE(1),
-      STRING_VALUE(2),
-      INT64_VALUE(3),
-      FLOAT32_VALUE(4),
-      INT32_VALUE(5),
-      INT16_VALUE(6),
-      INT8_VALUE(7),
-      BOOL_VALUE(8),
-      UINT64_VALUE(9),
-      UINT32_VALUE(10),
-      UINT16_VALUE(11),
-      UINT8_VALUE(12),
-      TIMESTAMP_VALUE(13),
-      VARBINARY_VALUE(14),
-      VALUE_NOT_SET(0);
-      private final int value;
-      private ValueCase(int value) {
-        this.value = value;
-      }
-      /**
-       * @param value The number of the enum to look for.
-       * @return The enum associated with the given number.
-       * @deprecated Use {@link #forNumber(int)} instead.
-       */
-      @java.lang.Deprecated
-      public static ValueCase valueOf(int value) {
-        return forNumber(value);
-      }
-
-      public static ValueCase forNumber(int value) {
-        switch (value) {
-          case 1: return FLOAT64_VALUE;
-          case 2: return STRING_VALUE;
-          case 3: return INT64_VALUE;
-          case 4: return FLOAT32_VALUE;
-          case 5: return INT32_VALUE;
-          case 6: return INT16_VALUE;
-          case 7: return INT8_VALUE;
-          case 8: return BOOL_VALUE;
-          case 9: return UINT64_VALUE;
-          case 10: return UINT32_VALUE;
-          case 11: return UINT16_VALUE;
-          case 12: return UINT8_VALUE;
-          case 13: return TIMESTAMP_VALUE;
-          case 14: return VARBINARY_VALUE;
-          case 0: return VALUE_NOT_SET;
-          default: return null;
-        }
-      }
-      public int getNumber() {
-        return this.value;
-      }
-    };
-
-    public ValueCase
-    getValueCase() {
-      return ValueCase.forNumber(
-          valueCase_);
-    }
-
-    public static final int FLOAT64_VALUE_FIELD_NUMBER = 1;
-    /**
-     * <code>double float64_value = 1;</code>
-     * @return Whether the float64Value field is set.
-     */
-    @java.lang.Override
-    public boolean hasFloat64Value() {
-      return valueCase_ == 1;
-    }
-    /**
-     * <code>double float64_value = 1;</code>
-     * @return The float64Value.
-     */
-    @java.lang.Override
-    public double getFloat64Value() {
-      if (valueCase_ == 1) {
-        return (java.lang.Double) value_;
-      }
-      return 0D;
-    }
-
-    public static final int STRING_VALUE_FIELD_NUMBER = 2;
-    /**
-     * <code>string string_value = 2;</code>
-     * @return Whether the stringValue field is set.
-     */
-    public boolean hasStringValue() {
-      return valueCase_ == 2;
-    }
-    /**
-     * <code>string string_value = 2;</code>
-     * @return The stringValue.
-     */
-    public java.lang.String getStringValue() {
-      java.lang.Object ref = "";
-      if (valueCase_ == 2) {
-        ref = value_;
-      }
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        if (valueCase_ == 2) {
-          value_ = s;
-        }
-        return s;
-      }
-    }
-    /**
-     * <code>string string_value = 2;</code>
-     * @return The bytes for stringValue.
-     */
-    public com.google.protobuf.ByteString
-        getStringValueBytes() {
-      java.lang.Object ref = "";
-      if (valueCase_ == 2) {
-        ref = value_;
-      }
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        if (valueCase_ == 2) {
-          value_ = b;
-        }
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-
-    public static final int INT64_VALUE_FIELD_NUMBER = 3;
-    /**
-     * <code>int64 int64_value = 3;</code>
-     * @return Whether the int64Value field is set.
-     */
-    @java.lang.Override
-    public boolean hasInt64Value() {
-      return valueCase_ == 3;
-    }
-    /**
-     * <code>int64 int64_value = 3;</code>
-     * @return The int64Value.
-     */
-    @java.lang.Override
-    public long getInt64Value() {
-      if (valueCase_ == 3) {
-        return (java.lang.Long) value_;
-      }
-      return 0L;
-    }
-
-    public static final int FLOAT32_VALUE_FIELD_NUMBER = 4;
-    /**
-     * <code>float float32_value = 4;</code>
-     * @return Whether the float32Value field is set.
-     */
-    @java.lang.Override
-    public boolean hasFloat32Value() {
-      return valueCase_ == 4;
-    }
-    /**
-     * <code>float float32_value = 4;</code>
-     * @return The float32Value.
-     */
-    @java.lang.Override
-    public float getFloat32Value() {
-      if (valueCase_ == 4) {
-        return (java.lang.Float) value_;
-      }
-      return 0F;
-    }
-
-    public static final int INT32_VALUE_FIELD_NUMBER = 5;
-    /**
-     * <code>int32 int32_value = 5;</code>
-     * @return Whether the int32Value field is set.
-     */
-    @java.lang.Override
-    public boolean hasInt32Value() {
-      return valueCase_ == 5;
-    }
-    /**
-     * <code>int32 int32_value = 5;</code>
-     * @return The int32Value.
-     */
-    @java.lang.Override
-    public int getInt32Value() {
-      if (valueCase_ == 5) {
-        return (java.lang.Integer) value_;
-      }
-      return 0;
-    }
-
-    public static final int INT16_VALUE_FIELD_NUMBER = 6;
-    /**
-     * <code>int32 int16_value = 6;</code>
-     * @return Whether the int16Value field is set.
-     */
-    @java.lang.Override
-    public boolean hasInt16Value() {
-      return valueCase_ == 6;
-    }
-    /**
-     * <code>int32 int16_value = 6;</code>
-     * @return The int16Value.
-     */
-    @java.lang.Override
-    public int getInt16Value() {
-      if (valueCase_ == 6) {
-        return (java.lang.Integer) value_;
-      }
-      return 0;
-    }
-
-    public static final int INT8_VALUE_FIELD_NUMBER = 7;
-    /**
-     * <code>int32 int8_value = 7;</code>
-     * @return Whether the int8Value field is set.
-     */
-    @java.lang.Override
-    public boolean hasInt8Value() {
-      return valueCase_ == 7;
-    }
-    /**
-     * <code>int32 int8_value = 7;</code>
-     * @return The int8Value.
-     */
-    @java.lang.Override
-    public int getInt8Value() {
-      if (valueCase_ == 7) {
-        return (java.lang.Integer) value_;
-      }
-      return 0;
-    }
-
-    public static final int BOOL_VALUE_FIELD_NUMBER = 8;
-    /**
-     * <code>bool bool_value = 8;</code>
-     * @return Whether the boolValue field is set.
-     */
-    @java.lang.Override
-    public boolean hasBoolValue() {
-      return valueCase_ == 8;
-    }
-    /**
-     * <code>bool bool_value = 8;</code>
-     * @return The boolValue.
-     */
-    @java.lang.Override
-    public boolean getBoolValue() {
-      if (valueCase_ == 8) {
-        return (java.lang.Boolean) value_;
-      }
-      return false;
-    }
-
-    public static final int UINT64_VALUE_FIELD_NUMBER = 9;
-    /**
-     * <code>uint64 uint64_value = 9;</code>
-     * @return Whether the uint64Value field is set.
-     */
-    @java.lang.Override
-    public boolean hasUint64Value() {
-      return valueCase_ == 9;
-    }
-    /**
-     * <code>uint64 uint64_value = 9;</code>
-     * @return The uint64Value.
-     */
-    @java.lang.Override
-    public long getUint64Value() {
-      if (valueCase_ == 9) {
-        return (java.lang.Long) value_;
-      }
-      return 0L;
-    }
-
-    public static final int UINT32_VALUE_FIELD_NUMBER = 10;
-    /**
-     * <code>uint32 uint32_value = 10;</code>
-     * @return Whether the uint32Value field is set.
-     */
-    @java.lang.Override
-    public boolean hasUint32Value() {
-      return valueCase_ == 10;
-    }
-    /**
-     * <code>uint32 uint32_value = 10;</code>
-     * @return The uint32Value.
-     */
-    @java.lang.Override
-    public int getUint32Value() {
-      if (valueCase_ == 10) {
-        return (java.lang.Integer) value_;
-      }
-      return 0;
-    }
-
-    public static final int UINT16_VALUE_FIELD_NUMBER = 11;
-    /**
-     * <code>uint32 uint16_value = 11;</code>
-     * @return Whether the uint16Value field is set.
-     */
-    @java.lang.Override
-    public boolean hasUint16Value() {
-      return valueCase_ == 11;
-    }
-    /**
-     * <code>uint32 uint16_value = 11;</code>
-     * @return The uint16Value.
-     */
-    @java.lang.Override
-    public int getUint16Value() {
-      if (valueCase_ == 11) {
-        return (java.lang.Integer) value_;
-      }
-      return 0;
-    }
-
-    public static final int UINT8_VALUE_FIELD_NUMBER = 12;
-    /**
-     * <code>uint32 uint8_value = 12;</code>
-     * @return Whether the uint8Value field is set.
-     */
-    @java.lang.Override
-    public boolean hasUint8Value() {
-      return valueCase_ == 12;
-    }
-    /**
-     * <code>uint32 uint8_value = 12;</code>
-     * @return The uint8Value.
-     */
-    @java.lang.Override
-    public int getUint8Value() {
-      if (valueCase_ == 12) {
-        return (java.lang.Integer) value_;
-      }
-      return 0;
-    }
-
-    public static final int TIMESTAMP_VALUE_FIELD_NUMBER = 13;
-    /**
-     * <code>int64 timestamp_value = 13;</code>
-     * @return Whether the timestampValue field is set.
-     */
-    @java.lang.Override
-    public boolean hasTimestampValue() {
-      return valueCase_ == 13;
-    }
-    /**
-     * <code>int64 timestamp_value = 13;</code>
-     * @return The timestampValue.
-     */
-    @java.lang.Override
-    public long getTimestampValue() {
-      if (valueCase_ == 13) {
-        return (java.lang.Long) value_;
-      }
-      return 0L;
-    }
-
-    public static final int VARBINARY_VALUE_FIELD_NUMBER = 14;
-    /**
-     * <code>bytes varbinary_value = 14;</code>
-     * @return Whether the varbinaryValue field is set.
-     */
-    @java.lang.Override
-    public boolean hasVarbinaryValue() {
-      return valueCase_ == 14;
-    }
-    /**
-     * <code>bytes varbinary_value = 14;</code>
-     * @return The varbinaryValue.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString getVarbinaryValue() {
-      if (valueCase_ == 14) {
-        return (com.google.protobuf.ByteString) value_;
-      }
-      return com.google.protobuf.ByteString.EMPTY;
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (valueCase_ == 1) {
-        output.writeDouble(
-            1, (double)((java.lang.Double) value_));
-      }
-      if (valueCase_ == 2) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, value_);
-      }
-      if (valueCase_ == 3) {
-        output.writeInt64(
-            3, (long)((java.lang.Long) value_));
-      }
-      if (valueCase_ == 4) {
-        output.writeFloat(
-            4, (float)((java.lang.Float) value_));
-      }
-      if (valueCase_ == 5) {
-        output.writeInt32(
-            5, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 6) {
-        output.writeInt32(
-            6, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 7) {
-        output.writeInt32(
-            7, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 8) {
-        output.writeBool(
-            8, (boolean)((java.lang.Boolean) value_));
-      }
-      if (valueCase_ == 9) {
-        output.writeUInt64(
-            9, (long)((java.lang.Long) value_));
-      }
-      if (valueCase_ == 10) {
-        output.writeUInt32(
-            10, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 11) {
-        output.writeUInt32(
-            11, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 12) {
-        output.writeUInt32(
-            12, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 13) {
-        output.writeInt64(
-            13, (long)((java.lang.Long) value_));
-      }
-      if (valueCase_ == 14) {
-        output.writeBytes(
-            14, (com.google.protobuf.ByteString) value_);
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (valueCase_ == 1) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeDoubleSize(
-              1, (double)((java.lang.Double) value_));
-      }
-      if (valueCase_ == 2) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, value_);
-      }
-      if (valueCase_ == 3) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt64Size(
-              3, (long)((java.lang.Long) value_));
-      }
-      if (valueCase_ == 4) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(
-              4, (float)((java.lang.Float) value_));
-      }
-      if (valueCase_ == 5) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(
-              5, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 6) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(
-              6, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 7) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(
-              7, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 8) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(
-              8, (boolean)((java.lang.Boolean) value_));
-      }
-      if (valueCase_ == 9) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt64Size(
-              9, (long)((java.lang.Long) value_));
-      }
-      if (valueCase_ == 10) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(
-              10, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 11) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(
-              11, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 12) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(
-              12, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 13) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt64Size(
-              13, (long)((java.lang.Long) value_));
-      }
-      if (valueCase_ == 14) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(
-              14, (com.google.protobuf.ByteString) value_);
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof io.ceresdb.proto.Storage.Value)) {
-        return super.equals(obj);
-      }
-      io.ceresdb.proto.Storage.Value other = (io.ceresdb.proto.Storage.Value) obj;
-
-      if (!getValueCase().equals(other.getValueCase())) return false;
-      switch (valueCase_) {
-        case 1:
-          if (java.lang.Double.doubleToLongBits(getFloat64Value())
-              != java.lang.Double.doubleToLongBits(
-                  other.getFloat64Value())) return false;
-          break;
-        case 2:
-          if (!getStringValue()
-              .equals(other.getStringValue())) return false;
-          break;
-        case 3:
-          if (getInt64Value()
-              != other.getInt64Value()) return false;
-          break;
-        case 4:
-          if (java.lang.Float.floatToIntBits(getFloat32Value())
-              != java.lang.Float.floatToIntBits(
-                  other.getFloat32Value())) return false;
-          break;
-        case 5:
-          if (getInt32Value()
-              != other.getInt32Value()) return false;
-          break;
-        case 6:
-          if (getInt16Value()
-              != other.getInt16Value()) return false;
-          break;
-        case 7:
-          if (getInt8Value()
-              != other.getInt8Value()) return false;
-          break;
-        case 8:
-          if (getBoolValue()
-              != other.getBoolValue()) return false;
-          break;
-        case 9:
-          if (getUint64Value()
-              != other.getUint64Value()) return false;
-          break;
-        case 10:
-          if (getUint32Value()
-              != other.getUint32Value()) return false;
-          break;
-        case 11:
-          if (getUint16Value()
-              != other.getUint16Value()) return false;
-          break;
-        case 12:
-          if (getUint8Value()
-              != other.getUint8Value()) return false;
-          break;
-        case 13:
-          if (getTimestampValue()
-              != other.getTimestampValue()) return false;
-          break;
-        case 14:
-          if (!getVarbinaryValue()
-              .equals(other.getVarbinaryValue())) return false;
-          break;
-        case 0:
-        default:
-      }
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      switch (valueCase_) {
-        case 1:
-          hash = (37 * hash) + FLOAT64_VALUE_FIELD_NUMBER;
-          hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
-              java.lang.Double.doubleToLongBits(getFloat64Value()));
-          break;
-        case 2:
-          hash = (37 * hash) + STRING_VALUE_FIELD_NUMBER;
-          hash = (53 * hash) + getStringValue().hashCode();
-          break;
-        case 3:
-          hash = (37 * hash) + INT64_VALUE_FIELD_NUMBER;
-          hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
-              getInt64Value());
-          break;
-        case 4:
-          hash = (37 * hash) + FLOAT32_VALUE_FIELD_NUMBER;
-          hash = (53 * hash) + java.lang.Float.floatToIntBits(
-              getFloat32Value());
-          break;
-        case 5:
-          hash = (37 * hash) + INT32_VALUE_FIELD_NUMBER;
-          hash = (53 * hash) + getInt32Value();
-          break;
-        case 6:
-          hash = (37 * hash) + INT16_VALUE_FIELD_NUMBER;
-          hash = (53 * hash) + getInt16Value();
-          break;
-        case 7:
-          hash = (37 * hash) + INT8_VALUE_FIELD_NUMBER;
-          hash = (53 * hash) + getInt8Value();
-          break;
-        case 8:
-          hash = (37 * hash) + BOOL_VALUE_FIELD_NUMBER;
-          hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
-              getBoolValue());
-          break;
-        case 9:
-          hash = (37 * hash) + UINT64_VALUE_FIELD_NUMBER;
-          hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
-              getUint64Value());
-          break;
-        case 10:
-          hash = (37 * hash) + UINT32_VALUE_FIELD_NUMBER;
-          hash = (53 * hash) + getUint32Value();
-          break;
-        case 11:
-          hash = (37 * hash) + UINT16_VALUE_FIELD_NUMBER;
-          hash = (53 * hash) + getUint16Value();
-          break;
-        case 12:
-          hash = (37 * hash) + UINT8_VALUE_FIELD_NUMBER;
-          hash = (53 * hash) + getUint8Value();
-          break;
-        case 13:
-          hash = (37 * hash) + TIMESTAMP_VALUE_FIELD_NUMBER;
-          hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
-              getTimestampValue());
-          break;
-        case 14:
-          hash = (37 * hash) + VARBINARY_VALUE_FIELD_NUMBER;
-          hash = (53 * hash) + getVarbinaryValue().hashCode();
-          break;
-        case 0:
-        default:
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static io.ceresdb.proto.Storage.Value parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.Value parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Value parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.Value parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Value parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.Value parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Value parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.Value parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Value parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.Value parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Value parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.Value parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(io.ceresdb.proto.Storage.Value prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code storage.Value}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:storage.Value)
-        io.ceresdb.proto.Storage.ValueOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.ceresdb.proto.Storage.internal_static_storage_Value_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.ceresdb.proto.Storage.internal_static_storage_Value_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.ceresdb.proto.Storage.Value.class, io.ceresdb.proto.Storage.Value.Builder.class);
-      }
-
-      // Construct using io.ceresdb.proto.Storage.Value.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        valueCase_ = 0;
-        value_ = null;
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.ceresdb.proto.Storage.internal_static_storage_Value_descriptor;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.Value getDefaultInstanceForType() {
-        return io.ceresdb.proto.Storage.Value.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.Value build() {
-        io.ceresdb.proto.Storage.Value result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.Value buildPartial() {
-        io.ceresdb.proto.Storage.Value result = new io.ceresdb.proto.Storage.Value(this);
-        if (valueCase_ == 1) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 2) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 3) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 4) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 5) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 6) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 7) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 8) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 9) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 10) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 11) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 12) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 13) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 14) {
-          result.value_ = value_;
-        }
-        result.valueCase_ = valueCase_;
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.ceresdb.proto.Storage.Value) {
-          return mergeFrom((io.ceresdb.proto.Storage.Value)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.ceresdb.proto.Storage.Value other) {
-        if (other == io.ceresdb.proto.Storage.Value.getDefaultInstance()) return this;
-        switch (other.getValueCase()) {
-          case FLOAT64_VALUE: {
-            setFloat64Value(other.getFloat64Value());
-            break;
-          }
-          case STRING_VALUE: {
-            valueCase_ = 2;
-            value_ = other.value_;
-            onChanged();
-            break;
-          }
-          case INT64_VALUE: {
-            setInt64Value(other.getInt64Value());
-            break;
-          }
-          case FLOAT32_VALUE: {
-            setFloat32Value(other.getFloat32Value());
-            break;
-          }
-          case INT32_VALUE: {
-            setInt32Value(other.getInt32Value());
-            break;
-          }
-          case INT16_VALUE: {
-            setInt16Value(other.getInt16Value());
-            break;
-          }
-          case INT8_VALUE: {
-            setInt8Value(other.getInt8Value());
-            break;
-          }
-          case BOOL_VALUE: {
-            setBoolValue(other.getBoolValue());
-            break;
-          }
-          case UINT64_VALUE: {
-            setUint64Value(other.getUint64Value());
-            break;
-          }
-          case UINT32_VALUE: {
-            setUint32Value(other.getUint32Value());
-            break;
-          }
-          case UINT16_VALUE: {
-            setUint16Value(other.getUint16Value());
-            break;
-          }
-          case UINT8_VALUE: {
-            setUint8Value(other.getUint8Value());
-            break;
-          }
-          case TIMESTAMP_VALUE: {
-            setTimestampValue(other.getTimestampValue());
-            break;
-          }
-          case VARBINARY_VALUE: {
-            setVarbinaryValue(other.getVarbinaryValue());
-            break;
-          }
-          case VALUE_NOT_SET: {
-            break;
-          }
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.ceresdb.proto.Storage.Value parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.ceresdb.proto.Storage.Value) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int valueCase_ = 0;
-      private java.lang.Object value_;
-      public ValueCase
-          getValueCase() {
-        return ValueCase.forNumber(
-            valueCase_);
-      }
-
-      public Builder clearValue() {
-        valueCase_ = 0;
-        value_ = null;
-        onChanged();
-        return this;
-      }
-
-
-      /**
-       * <code>double float64_value = 1;</code>
-       * @return Whether the float64Value field is set.
-       */
-      public boolean hasFloat64Value() {
-        return valueCase_ == 1;
-      }
-      /**
-       * <code>double float64_value = 1;</code>
-       * @return The float64Value.
-       */
-      public double getFloat64Value() {
-        if (valueCase_ == 1) {
-          return (java.lang.Double) value_;
-        }
-        return 0D;
-      }
-      /**
-       * <code>double float64_value = 1;</code>
-       * @param value The float64Value to set.
-       * @return This builder for chaining.
-       */
-      public Builder setFloat64Value(double value) {
-        valueCase_ = 1;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>double float64_value = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearFloat64Value() {
-        if (valueCase_ == 1) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
-        return this;
-      }
-
-      /**
-       * <code>string string_value = 2;</code>
-       * @return Whether the stringValue field is set.
-       */
-      @java.lang.Override
-      public boolean hasStringValue() {
-        return valueCase_ == 2;
-      }
-      /**
-       * <code>string string_value = 2;</code>
-       * @return The stringValue.
-       */
-      @java.lang.Override
-      public java.lang.String getStringValue() {
-        java.lang.Object ref = "";
-        if (valueCase_ == 2) {
-          ref = value_;
-        }
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          if (valueCase_ == 2) {
-            value_ = s;
-          }
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string string_value = 2;</code>
-       * @return The bytes for stringValue.
-       */
-      @java.lang.Override
-      public com.google.protobuf.ByteString
-          getStringValueBytes() {
-        java.lang.Object ref = "";
-        if (valueCase_ == 2) {
-          ref = value_;
-        }
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          if (valueCase_ == 2) {
-            value_ = b;
-          }
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string string_value = 2;</code>
-       * @param value The stringValue to set.
-       * @return This builder for chaining.
-       */
-      public Builder setStringValue(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  valueCase_ = 2;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string string_value = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearStringValue() {
-        if (valueCase_ == 2) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
-        return this;
-      }
-      /**
-       * <code>string string_value = 2;</code>
-       * @param value The bytes for stringValue to set.
-       * @return This builder for chaining.
-       */
-      public Builder setStringValueBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        valueCase_ = 2;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-
-      /**
-       * <code>int64 int64_value = 3;</code>
-       * @return Whether the int64Value field is set.
-       */
-      public boolean hasInt64Value() {
-        return valueCase_ == 3;
-      }
-      /**
-       * <code>int64 int64_value = 3;</code>
-       * @return The int64Value.
-       */
-      public long getInt64Value() {
-        if (valueCase_ == 3) {
-          return (java.lang.Long) value_;
-        }
-        return 0L;
-      }
-      /**
-       * <code>int64 int64_value = 3;</code>
-       * @param value The int64Value to set.
-       * @return This builder for chaining.
-       */
-      public Builder setInt64Value(long value) {
-        valueCase_ = 3;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>int64 int64_value = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearInt64Value() {
-        if (valueCase_ == 3) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
-        return this;
-      }
-
-      /**
-       * <code>float float32_value = 4;</code>
-       * @return Whether the float32Value field is set.
-       */
-      public boolean hasFloat32Value() {
-        return valueCase_ == 4;
-      }
-      /**
-       * <code>float float32_value = 4;</code>
-       * @return The float32Value.
-       */
-      public float getFloat32Value() {
-        if (valueCase_ == 4) {
-          return (java.lang.Float) value_;
-        }
-        return 0F;
-      }
-      /**
-       * <code>float float32_value = 4;</code>
-       * @param value The float32Value to set.
-       * @return This builder for chaining.
-       */
-      public Builder setFloat32Value(float value) {
-        valueCase_ = 4;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>float float32_value = 4;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearFloat32Value() {
-        if (valueCase_ == 4) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
-        return this;
-      }
-
-      /**
-       * <code>int32 int32_value = 5;</code>
-       * @return Whether the int32Value field is set.
-       */
-      public boolean hasInt32Value() {
-        return valueCase_ == 5;
-      }
-      /**
-       * <code>int32 int32_value = 5;</code>
-       * @return The int32Value.
-       */
-      public int getInt32Value() {
-        if (valueCase_ == 5) {
-          return (java.lang.Integer) value_;
-        }
-        return 0;
-      }
-      /**
-       * <code>int32 int32_value = 5;</code>
-       * @param value The int32Value to set.
-       * @return This builder for chaining.
-       */
-      public Builder setInt32Value(int value) {
-        valueCase_ = 5;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>int32 int32_value = 5;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearInt32Value() {
-        if (valueCase_ == 5) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
-        return this;
-      }
-
-      /**
-       * <code>int32 int16_value = 6;</code>
-       * @return Whether the int16Value field is set.
-       */
-      public boolean hasInt16Value() {
-        return valueCase_ == 6;
-      }
-      /**
-       * <code>int32 int16_value = 6;</code>
-       * @return The int16Value.
-       */
-      public int getInt16Value() {
-        if (valueCase_ == 6) {
-          return (java.lang.Integer) value_;
-        }
-        return 0;
-      }
-      /**
-       * <code>int32 int16_value = 6;</code>
-       * @param value The int16Value to set.
-       * @return This builder for chaining.
-       */
-      public Builder setInt16Value(int value) {
-        valueCase_ = 6;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>int32 int16_value = 6;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearInt16Value() {
-        if (valueCase_ == 6) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
-        return this;
-      }
-
-      /**
-       * <code>int32 int8_value = 7;</code>
-       * @return Whether the int8Value field is set.
-       */
-      public boolean hasInt8Value() {
-        return valueCase_ == 7;
-      }
-      /**
-       * <code>int32 int8_value = 7;</code>
-       * @return The int8Value.
-       */
-      public int getInt8Value() {
-        if (valueCase_ == 7) {
-          return (java.lang.Integer) value_;
-        }
-        return 0;
-      }
-      /**
-       * <code>int32 int8_value = 7;</code>
-       * @param value The int8Value to set.
-       * @return This builder for chaining.
-       */
-      public Builder setInt8Value(int value) {
-        valueCase_ = 7;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>int32 int8_value = 7;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearInt8Value() {
-        if (valueCase_ == 7) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
-        return this;
-      }
-
-      /**
-       * <code>bool bool_value = 8;</code>
-       * @return Whether the boolValue field is set.
-       */
-      public boolean hasBoolValue() {
-        return valueCase_ == 8;
-      }
-      /**
-       * <code>bool bool_value = 8;</code>
-       * @return The boolValue.
-       */
-      public boolean getBoolValue() {
-        if (valueCase_ == 8) {
-          return (java.lang.Boolean) value_;
-        }
-        return false;
-      }
-      /**
-       * <code>bool bool_value = 8;</code>
-       * @param value The boolValue to set.
-       * @return This builder for chaining.
-       */
-      public Builder setBoolValue(boolean value) {
-        valueCase_ = 8;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>bool bool_value = 8;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearBoolValue() {
-        if (valueCase_ == 8) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
-        return this;
-      }
-
-      /**
-       * <code>uint64 uint64_value = 9;</code>
-       * @return Whether the uint64Value field is set.
-       */
-      public boolean hasUint64Value() {
-        return valueCase_ == 9;
-      }
-      /**
-       * <code>uint64 uint64_value = 9;</code>
-       * @return The uint64Value.
-       */
-      public long getUint64Value() {
-        if (valueCase_ == 9) {
-          return (java.lang.Long) value_;
-        }
-        return 0L;
-      }
-      /**
-       * <code>uint64 uint64_value = 9;</code>
-       * @param value The uint64Value to set.
-       * @return This builder for chaining.
-       */
-      public Builder setUint64Value(long value) {
-        valueCase_ = 9;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint64 uint64_value = 9;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearUint64Value() {
-        if (valueCase_ == 9) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
-        return this;
-      }
-
-      /**
-       * <code>uint32 uint32_value = 10;</code>
-       * @return Whether the uint32Value field is set.
-       */
-      public boolean hasUint32Value() {
-        return valueCase_ == 10;
-      }
-      /**
-       * <code>uint32 uint32_value = 10;</code>
-       * @return The uint32Value.
-       */
-      public int getUint32Value() {
-        if (valueCase_ == 10) {
-          return (java.lang.Integer) value_;
-        }
-        return 0;
-      }
-      /**
-       * <code>uint32 uint32_value = 10;</code>
-       * @param value The uint32Value to set.
-       * @return This builder for chaining.
-       */
-      public Builder setUint32Value(int value) {
-        valueCase_ = 10;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 uint32_value = 10;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearUint32Value() {
-        if (valueCase_ == 10) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
-        return this;
-      }
-
-      /**
-       * <code>uint32 uint16_value = 11;</code>
-       * @return Whether the uint16Value field is set.
-       */
-      public boolean hasUint16Value() {
-        return valueCase_ == 11;
-      }
-      /**
-       * <code>uint32 uint16_value = 11;</code>
-       * @return The uint16Value.
-       */
-      public int getUint16Value() {
-        if (valueCase_ == 11) {
-          return (java.lang.Integer) value_;
-        }
-        return 0;
-      }
-      /**
-       * <code>uint32 uint16_value = 11;</code>
-       * @param value The uint16Value to set.
-       * @return This builder for chaining.
-       */
-      public Builder setUint16Value(int value) {
-        valueCase_ = 11;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 uint16_value = 11;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearUint16Value() {
-        if (valueCase_ == 11) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
-        return this;
-      }
-
-      /**
-       * <code>uint32 uint8_value = 12;</code>
-       * @return Whether the uint8Value field is set.
-       */
-      public boolean hasUint8Value() {
-        return valueCase_ == 12;
-      }
-      /**
-       * <code>uint32 uint8_value = 12;</code>
-       * @return The uint8Value.
-       */
-      public int getUint8Value() {
-        if (valueCase_ == 12) {
-          return (java.lang.Integer) value_;
-        }
-        return 0;
-      }
-      /**
-       * <code>uint32 uint8_value = 12;</code>
-       * @param value The uint8Value to set.
-       * @return This builder for chaining.
-       */
-      public Builder setUint8Value(int value) {
-        valueCase_ = 12;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 uint8_value = 12;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearUint8Value() {
-        if (valueCase_ == 12) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
-        return this;
-      }
-
-      /**
-       * <code>int64 timestamp_value = 13;</code>
-       * @return Whether the timestampValue field is set.
-       */
-      public boolean hasTimestampValue() {
-        return valueCase_ == 13;
-      }
-      /**
-       * <code>int64 timestamp_value = 13;</code>
-       * @return The timestampValue.
-       */
-      public long getTimestampValue() {
-        if (valueCase_ == 13) {
-          return (java.lang.Long) value_;
-        }
-        return 0L;
-      }
-      /**
-       * <code>int64 timestamp_value = 13;</code>
-       * @param value The timestampValue to set.
-       * @return This builder for chaining.
-       */
-      public Builder setTimestampValue(long value) {
-        valueCase_ = 13;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>int64 timestamp_value = 13;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearTimestampValue() {
-        if (valueCase_ == 13) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
-        return this;
-      }
-
-      /**
-       * <code>bytes varbinary_value = 14;</code>
-       * @return Whether the varbinaryValue field is set.
-       */
-      public boolean hasVarbinaryValue() {
-        return valueCase_ == 14;
-      }
-      /**
-       * <code>bytes varbinary_value = 14;</code>
-       * @return The varbinaryValue.
-       */
-      public com.google.protobuf.ByteString getVarbinaryValue() {
-        if (valueCase_ == 14) {
-          return (com.google.protobuf.ByteString) value_;
-        }
-        return com.google.protobuf.ByteString.EMPTY;
-      }
-      /**
-       * <code>bytes varbinary_value = 14;</code>
-       * @param value The varbinaryValue to set.
-       * @return This builder for chaining.
-       */
-      public Builder setVarbinaryValue(com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  valueCase_ = 14;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>bytes varbinary_value = 14;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearVarbinaryValue() {
-        if (valueCase_ == 14) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
-        return this;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:storage.Value)
-    }
-
-    // @@protoc_insertion_point(class_scope:storage.Value)
-    private static final io.ceresdb.proto.Storage.Value DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new io.ceresdb.proto.Storage.Value();
-    }
-
-    public static io.ceresdb.proto.Storage.Value getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<Value>
-        PARSER = new com.google.protobuf.AbstractParser<Value>() {
-      @java.lang.Override
-      public Value parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Value(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<Value> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<Value> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.Value getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface FieldOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:storage.Field)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>uint32 name_index = 1;</code>
-     * @return The nameIndex.
-     */
-    int getNameIndex();
-
-    /**
-     * <code>.storage.Value value = 2;</code>
-     * @return Whether the value field is set.
-     */
-    boolean hasValue();
-    /**
-     * <code>.storage.Value value = 2;</code>
-     * @return The value.
-     */
-    io.ceresdb.proto.Storage.Value getValue();
-    /**
-     * <code>.storage.Value value = 2;</code>
-     */
-    io.ceresdb.proto.Storage.ValueOrBuilder getValueOrBuilder();
-  }
-  /**
-   * Protobuf type {@code storage.Field}
-   */
-  public static final class Field extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:storage.Field)
-      FieldOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use Field.newBuilder() to construct.
-    private Field(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private Field() {
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new Field();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private Field(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      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;
-            case 8: {
-
-              nameIndex_ = input.readUInt32();
-              break;
-            }
-            case 18: {
-              io.ceresdb.proto.Storage.Value.Builder subBuilder = null;
-              if (value_ != null) {
-                subBuilder = value_.toBuilder();
-              }
-              value_ = input.readMessage(io.ceresdb.proto.Storage.Value.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(value_);
-                value_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (com.google.protobuf.UninitializedMessageException e) {
-        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.ceresdb.proto.Storage.internal_static_storage_Field_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.ceresdb.proto.Storage.internal_static_storage_Field_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.ceresdb.proto.Storage.Field.class, io.ceresdb.proto.Storage.Field.Builder.class);
-    }
-
-    public static final int NAME_INDEX_FIELD_NUMBER = 1;
-    private int nameIndex_;
-    /**
-     * <code>uint32 name_index = 1;</code>
-     * @return The nameIndex.
-     */
-    @java.lang.Override
-    public int getNameIndex() {
-      return nameIndex_;
-    }
-
-    public static final int VALUE_FIELD_NUMBER = 2;
-    private io.ceresdb.proto.Storage.Value value_;
-    /**
-     * <code>.storage.Value value = 2;</code>
-     * @return Whether the value field is set.
-     */
-    @java.lang.Override
-    public boolean hasValue() {
-      return value_ != null;
-    }
-    /**
-     * <code>.storage.Value value = 2;</code>
-     * @return The value.
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.Value getValue() {
-      return value_ == null ? io.ceresdb.proto.Storage.Value.getDefaultInstance() : value_;
-    }
-    /**
-     * <code>.storage.Value value = 2;</code>
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.ValueOrBuilder getValueOrBuilder() {
-      return getValue();
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (nameIndex_ != 0) {
-        output.writeUInt32(1, nameIndex_);
-      }
-      if (value_ != null) {
-        output.writeMessage(2, getValue());
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (nameIndex_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(1, nameIndex_);
-      }
-      if (value_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getValue());
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof io.ceresdb.proto.Storage.Field)) {
-        return super.equals(obj);
-      }
-      io.ceresdb.proto.Storage.Field other = (io.ceresdb.proto.Storage.Field) obj;
-
-      if (getNameIndex()
-          != other.getNameIndex()) return false;
-      if (hasValue() != other.hasValue()) return false;
-      if (hasValue()) {
-        if (!getValue()
-            .equals(other.getValue())) return false;
-      }
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + NAME_INDEX_FIELD_NUMBER;
-      hash = (53 * hash) + getNameIndex();
-      if (hasValue()) {
-        hash = (37 * hash) + VALUE_FIELD_NUMBER;
-        hash = (53 * hash) + getValue().hashCode();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static io.ceresdb.proto.Storage.Field parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.Field parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Field parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.Field parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Field parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.Field parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Field parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.Field parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Field parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.Field parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Field parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.Field parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(io.ceresdb.proto.Storage.Field prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code storage.Field}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:storage.Field)
-        io.ceresdb.proto.Storage.FieldOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.ceresdb.proto.Storage.internal_static_storage_Field_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.ceresdb.proto.Storage.internal_static_storage_Field_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.ceresdb.proto.Storage.Field.class, io.ceresdb.proto.Storage.Field.Builder.class);
-      }
-
-      // Construct using io.ceresdb.proto.Storage.Field.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        nameIndex_ = 0;
-
-        if (valueBuilder_ == null) {
-          value_ = null;
-        } else {
-          value_ = null;
-          valueBuilder_ = null;
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.ceresdb.proto.Storage.internal_static_storage_Field_descriptor;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.Field getDefaultInstanceForType() {
-        return io.ceresdb.proto.Storage.Field.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.Field build() {
-        io.ceresdb.proto.Storage.Field result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.Field buildPartial() {
-        io.ceresdb.proto.Storage.Field result = new io.ceresdb.proto.Storage.Field(this);
-        result.nameIndex_ = nameIndex_;
-        if (valueBuilder_ == null) {
-          result.value_ = value_;
-        } else {
-          result.value_ = valueBuilder_.build();
-        }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.ceresdb.proto.Storage.Field) {
-          return mergeFrom((io.ceresdb.proto.Storage.Field)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.ceresdb.proto.Storage.Field other) {
-        if (other == io.ceresdb.proto.Storage.Field.getDefaultInstance()) return this;
-        if (other.getNameIndex() != 0) {
-          setNameIndex(other.getNameIndex());
-        }
-        if (other.hasValue()) {
-          mergeValue(other.getValue());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.ceresdb.proto.Storage.Field parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.ceresdb.proto.Storage.Field) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private int nameIndex_ ;
-      /**
-       * <code>uint32 name_index = 1;</code>
-       * @return The nameIndex.
-       */
-      @java.lang.Override
-      public int getNameIndex() {
-        return nameIndex_;
-      }
-      /**
-       * <code>uint32 name_index = 1;</code>
-       * @param value The nameIndex to set.
-       * @return This builder for chaining.
-       */
-      public Builder setNameIndex(int value) {
-        
-        nameIndex_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 name_index = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearNameIndex() {
-        
-        nameIndex_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private io.ceresdb.proto.Storage.Value value_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          io.ceresdb.proto.Storage.Value, io.ceresdb.proto.Storage.Value.Builder, io.ceresdb.proto.Storage.ValueOrBuilder> valueBuilder_;
-      /**
-       * <code>.storage.Value value = 2;</code>
-       * @return Whether the value field is set.
-       */
-      public boolean hasValue() {
-        return valueBuilder_ != null || value_ != null;
-      }
-      /**
-       * <code>.storage.Value value = 2;</code>
-       * @return The value.
-       */
-      public io.ceresdb.proto.Storage.Value getValue() {
-        if (valueBuilder_ == null) {
-          return value_ == null ? io.ceresdb.proto.Storage.Value.getDefaultInstance() : value_;
-        } else {
-          return valueBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.storage.Value value = 2;</code>
-       */
-      public Builder setValue(io.ceresdb.proto.Storage.Value value) {
-        if (valueBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          value_ = value;
-          onChanged();
-        } else {
-          valueBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.Value value = 2;</code>
-       */
-      public Builder setValue(
-          io.ceresdb.proto.Storage.Value.Builder builderForValue) {
-        if (valueBuilder_ == null) {
-          value_ = builderForValue.build();
-          onChanged();
-        } else {
-          valueBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.Value value = 2;</code>
-       */
-      public Builder mergeValue(io.ceresdb.proto.Storage.Value value) {
-        if (valueBuilder_ == null) {
-          if (value_ != null) {
-            value_ =
-              io.ceresdb.proto.Storage.Value.newBuilder(value_).mergeFrom(value).buildPartial();
-          } else {
-            value_ = value;
-          }
-          onChanged();
-        } else {
-          valueBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.Value value = 2;</code>
-       */
-      public Builder clearValue() {
-        if (valueBuilder_ == null) {
-          value_ = null;
-          onChanged();
-        } else {
-          value_ = null;
-          valueBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.Value value = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.Value.Builder getValueBuilder() {
-        
-        onChanged();
-        return getValueFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.storage.Value value = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.ValueOrBuilder getValueOrBuilder() {
-        if (valueBuilder_ != null) {
-          return valueBuilder_.getMessageOrBuilder();
-        } else {
-          return value_ == null ?
-              io.ceresdb.proto.Storage.Value.getDefaultInstance() : value_;
-        }
-      }
-      /**
-       * <code>.storage.Value value = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          io.ceresdb.proto.Storage.Value, io.ceresdb.proto.Storage.Value.Builder, io.ceresdb.proto.Storage.ValueOrBuilder> 
-          getValueFieldBuilder() {
-        if (valueBuilder_ == null) {
-          valueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              io.ceresdb.proto.Storage.Value, io.ceresdb.proto.Storage.Value.Builder, io.ceresdb.proto.Storage.ValueOrBuilder>(
-                  getValue(),
-                  getParentForChildren(),
-                  isClean());
-          value_ = null;
-        }
-        return valueBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:storage.Field)
-    }
-
-    // @@protoc_insertion_point(class_scope:storage.Field)
-    private static final io.ceresdb.proto.Storage.Field DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new io.ceresdb.proto.Storage.Field();
-    }
-
-    public static io.ceresdb.proto.Storage.Field getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<Field>
-        PARSER = new com.google.protobuf.AbstractParser<Field>() {
-      @java.lang.Override
-      public Field parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Field(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<Field> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<Field> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.Field getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface FieldGroupOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:storage.FieldGroup)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>int64 timestamp = 1;</code>
-     * @return The timestamp.
-     */
-    long getTimestamp();
-
-    /**
-     * <code>repeated .storage.Field fields = 2;</code>
-     */
-    java.util.List<io.ceresdb.proto.Storage.Field> 
-        getFieldsList();
-    /**
-     * <code>repeated .storage.Field fields = 2;</code>
-     */
-    io.ceresdb.proto.Storage.Field getFields(int index);
-    /**
-     * <code>repeated .storage.Field fields = 2;</code>
-     */
-    int getFieldsCount();
-    /**
-     * <code>repeated .storage.Field fields = 2;</code>
-     */
-    java.util.List<? extends io.ceresdb.proto.Storage.FieldOrBuilder> 
-        getFieldsOrBuilderList();
-    /**
-     * <code>repeated .storage.Field fields = 2;</code>
-     */
-    io.ceresdb.proto.Storage.FieldOrBuilder getFieldsOrBuilder(
-        int index);
-  }
-  /**
-   * Protobuf type {@code storage.FieldGroup}
-   */
-  public static final class FieldGroup extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:storage.FieldGroup)
-      FieldGroupOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use FieldGroup.newBuilder() to construct.
-    private FieldGroup(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private FieldGroup() {
-      fields_ = java.util.Collections.emptyList();
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new FieldGroup();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private FieldGroup(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      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;
-            case 8: {
-
-              timestamp_ = input.readInt64();
-              break;
-            }
-            case 18: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                fields_ = new java.util.ArrayList<io.ceresdb.proto.Storage.Field>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              fields_.add(
-                  input.readMessage(io.ceresdb.proto.Storage.Field.parser(), extensionRegistry));
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (com.google.protobuf.UninitializedMessageException e) {
-        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          fields_ = java.util.Collections.unmodifiableList(fields_);
-        }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.ceresdb.proto.Storage.internal_static_storage_FieldGroup_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.ceresdb.proto.Storage.internal_static_storage_FieldGroup_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.ceresdb.proto.Storage.FieldGroup.class, io.ceresdb.proto.Storage.FieldGroup.Builder.class);
-    }
-
-    public static final int TIMESTAMP_FIELD_NUMBER = 1;
-    private long timestamp_;
-    /**
-     * <code>int64 timestamp = 1;</code>
-     * @return The timestamp.
-     */
-    @java.lang.Override
-    public long getTimestamp() {
-      return timestamp_;
-    }
-
-    public static final int FIELDS_FIELD_NUMBER = 2;
-    private java.util.List<io.ceresdb.proto.Storage.Field> fields_;
-    /**
-     * <code>repeated .storage.Field fields = 2;</code>
-     */
-    @java.lang.Override
-    public java.util.List<io.ceresdb.proto.Storage.Field> getFieldsList() {
-      return fields_;
-    }
-    /**
-     * <code>repeated .storage.Field fields = 2;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends io.ceresdb.proto.Storage.FieldOrBuilder> 
-        getFieldsOrBuilderList() {
-      return fields_;
-    }
-    /**
-     * <code>repeated .storage.Field fields = 2;</code>
-     */
-    @java.lang.Override
-    public int getFieldsCount() {
-      return fields_.size();
-    }
-    /**
-     * <code>repeated .storage.Field fields = 2;</code>
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.Field getFields(int index) {
-      return fields_.get(index);
-    }
-    /**
-     * <code>repeated .storage.Field fields = 2;</code>
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.FieldOrBuilder getFieldsOrBuilder(
-        int index) {
-      return fields_.get(index);
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (timestamp_ != 0L) {
-        output.writeInt64(1, timestamp_);
-      }
-      for (int i = 0; i < fields_.size(); i++) {
-        output.writeMessage(2, fields_.get(i));
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (timestamp_ != 0L) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt64Size(1, timestamp_);
-      }
-      for (int i = 0; i < fields_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, fields_.get(i));
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof io.ceresdb.proto.Storage.FieldGroup)) {
-        return super.equals(obj);
-      }
-      io.ceresdb.proto.Storage.FieldGroup other = (io.ceresdb.proto.Storage.FieldGroup) obj;
-
-      if (getTimestamp()
-          != other.getTimestamp()) return false;
-      if (!getFieldsList()
-          .equals(other.getFieldsList())) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
-      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
-          getTimestamp());
-      if (getFieldsCount() > 0) {
-        hash = (37 * hash) + FIELDS_FIELD_NUMBER;
-        hash = (53 * hash) + getFieldsList().hashCode();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static io.ceresdb.proto.Storage.FieldGroup parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.FieldGroup parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.FieldGroup parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.FieldGroup parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.FieldGroup parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.FieldGroup parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.FieldGroup parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.FieldGroup parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.FieldGroup parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.FieldGroup parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.FieldGroup parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.FieldGroup parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(io.ceresdb.proto.Storage.FieldGroup prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code storage.FieldGroup}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:storage.FieldGroup)
-        io.ceresdb.proto.Storage.FieldGroupOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.ceresdb.proto.Storage.internal_static_storage_FieldGroup_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.ceresdb.proto.Storage.internal_static_storage_FieldGroup_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.ceresdb.proto.Storage.FieldGroup.class, io.ceresdb.proto.Storage.FieldGroup.Builder.class);
-      }
-
-      // Construct using io.ceresdb.proto.Storage.FieldGroup.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-          getFieldsFieldBuilder();
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        timestamp_ = 0L;
-
-        if (fieldsBuilder_ == null) {
-          fields_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          fieldsBuilder_.clear();
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.ceresdb.proto.Storage.internal_static_storage_FieldGroup_descriptor;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.FieldGroup getDefaultInstanceForType() {
-        return io.ceresdb.proto.Storage.FieldGroup.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.FieldGroup build() {
-        io.ceresdb.proto.Storage.FieldGroup result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.FieldGroup buildPartial() {
-        io.ceresdb.proto.Storage.FieldGroup result = new io.ceresdb.proto.Storage.FieldGroup(this);
-        int from_bitField0_ = bitField0_;
-        result.timestamp_ = timestamp_;
-        if (fieldsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            fields_ = java.util.Collections.unmodifiableList(fields_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.fields_ = fields_;
-        } else {
-          result.fields_ = fieldsBuilder_.build();
-        }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.ceresdb.proto.Storage.FieldGroup) {
-          return mergeFrom((io.ceresdb.proto.Storage.FieldGroup)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.ceresdb.proto.Storage.FieldGroup other) {
-        if (other == io.ceresdb.proto.Storage.FieldGroup.getDefaultInstance()) return this;
-        if (other.getTimestamp() != 0L) {
-          setTimestamp(other.getTimestamp());
-        }
-        if (fieldsBuilder_ == null) {
-          if (!other.fields_.isEmpty()) {
-            if (fields_.isEmpty()) {
-              fields_ = other.fields_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureFieldsIsMutable();
-              fields_.addAll(other.fields_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.fields_.isEmpty()) {
-            if (fieldsBuilder_.isEmpty()) {
-              fieldsBuilder_.dispose();
-              fieldsBuilder_ = null;
-              fields_ = other.fields_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              fieldsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getFieldsFieldBuilder() : null;
-            } else {
-              fieldsBuilder_.addAllMessages(other.fields_);
-            }
-          }
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.ceresdb.proto.Storage.FieldGroup parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.ceresdb.proto.Storage.FieldGroup) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private long timestamp_ ;
-      /**
-       * <code>int64 timestamp = 1;</code>
-       * @return The timestamp.
-       */
-      @java.lang.Override
-      public long getTimestamp() {
-        return timestamp_;
-      }
-      /**
-       * <code>int64 timestamp = 1;</code>
-       * @param value The timestamp to set.
-       * @return This builder for chaining.
-       */
-      public Builder setTimestamp(long value) {
-        
-        timestamp_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>int64 timestamp = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearTimestamp() {
-        
-        timestamp_ = 0L;
-        onChanged();
-        return this;
-      }
-
-      private java.util.List<io.ceresdb.proto.Storage.Field> fields_ =
-        java.util.Collections.emptyList();
-      private void ensureFieldsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          fields_ = new java.util.ArrayList<io.ceresdb.proto.Storage.Field>(fields_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          io.ceresdb.proto.Storage.Field, io.ceresdb.proto.Storage.Field.Builder, io.ceresdb.proto.Storage.FieldOrBuilder> fieldsBuilder_;
-
-      /**
-       * <code>repeated .storage.Field fields = 2;</code>
-       */
-      public java.util.List<io.ceresdb.proto.Storage.Field> getFieldsList() {
-        if (fieldsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(fields_);
-        } else {
-          return fieldsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .storage.Field fields = 2;</code>
-       */
-      public int getFieldsCount() {
-        if (fieldsBuilder_ == null) {
-          return fields_.size();
-        } else {
-          return fieldsBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .storage.Field fields = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.Field getFields(int index) {
-        if (fieldsBuilder_ == null) {
-          return fields_.get(index);
-        } else {
-          return fieldsBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .storage.Field fields = 2;</code>
-       */
-      public Builder setFields(
-          int index, io.ceresdb.proto.Storage.Field value) {
-        if (fieldsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureFieldsIsMutable();
-          fields_.set(index, value);
-          onChanged();
-        } else {
-          fieldsBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Field fields = 2;</code>
-       */
-      public Builder setFields(
-          int index, io.ceresdb.proto.Storage.Field.Builder builderForValue) {
-        if (fieldsBuilder_ == null) {
-          ensureFieldsIsMutable();
-          fields_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          fieldsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Field fields = 2;</code>
-       */
-      public Builder addFields(io.ceresdb.proto.Storage.Field value) {
-        if (fieldsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureFieldsIsMutable();
-          fields_.add(value);
-          onChanged();
-        } else {
-          fieldsBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Field fields = 2;</code>
-       */
-      public Builder addFields(
-          int index, io.ceresdb.proto.Storage.Field value) {
-        if (fieldsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureFieldsIsMutable();
-          fields_.add(index, value);
-          onChanged();
-        } else {
-          fieldsBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Field fields = 2;</code>
-       */
-      public Builder addFields(
-          io.ceresdb.proto.Storage.Field.Builder builderForValue) {
-        if (fieldsBuilder_ == null) {
-          ensureFieldsIsMutable();
-          fields_.add(builderForValue.build());
-          onChanged();
-        } else {
-          fieldsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Field fields = 2;</code>
-       */
-      public Builder addFields(
-          int index, io.ceresdb.proto.Storage.Field.Builder builderForValue) {
-        if (fieldsBuilder_ == null) {
-          ensureFieldsIsMutable();
-          fields_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          fieldsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Field fields = 2;</code>
-       */
-      public Builder addAllFields(
-          java.lang.Iterable<? extends io.ceresdb.proto.Storage.Field> values) {
-        if (fieldsBuilder_ == null) {
-          ensureFieldsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, fields_);
-          onChanged();
-        } else {
-          fieldsBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Field fields = 2;</code>
-       */
-      public Builder clearFields() {
-        if (fieldsBuilder_ == null) {
-          fields_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          fieldsBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Field fields = 2;</code>
-       */
-      public Builder removeFields(int index) {
-        if (fieldsBuilder_ == null) {
-          ensureFieldsIsMutable();
-          fields_.remove(index);
-          onChanged();
-        } else {
-          fieldsBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Field fields = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.Field.Builder getFieldsBuilder(
-          int index) {
-        return getFieldsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .storage.Field fields = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.FieldOrBuilder getFieldsOrBuilder(
-          int index) {
-        if (fieldsBuilder_ == null) {
-          return fields_.get(index);  } else {
-          return fieldsBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .storage.Field fields = 2;</code>
-       */
-      public java.util.List<? extends io.ceresdb.proto.Storage.FieldOrBuilder> 
-           getFieldsOrBuilderList() {
-        if (fieldsBuilder_ != null) {
-          return fieldsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(fields_);
-        }
-      }
-      /**
-       * <code>repeated .storage.Field fields = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.Field.Builder addFieldsBuilder() {
-        return getFieldsFieldBuilder().addBuilder(
-            io.ceresdb.proto.Storage.Field.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .storage.Field fields = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.Field.Builder addFieldsBuilder(
-          int index) {
-        return getFieldsFieldBuilder().addBuilder(
-            index, io.ceresdb.proto.Storage.Field.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .storage.Field fields = 2;</code>
-       */
-      public java.util.List<io.ceresdb.proto.Storage.Field.Builder> 
-           getFieldsBuilderList() {
-        return getFieldsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          io.ceresdb.proto.Storage.Field, io.ceresdb.proto.Storage.Field.Builder, io.ceresdb.proto.Storage.FieldOrBuilder> 
-          getFieldsFieldBuilder() {
-        if (fieldsBuilder_ == null) {
-          fieldsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              io.ceresdb.proto.Storage.Field, io.ceresdb.proto.Storage.Field.Builder, io.ceresdb.proto.Storage.FieldOrBuilder>(
-                  fields_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          fields_ = null;
-        }
-        return fieldsBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:storage.FieldGroup)
-    }
-
-    // @@protoc_insertion_point(class_scope:storage.FieldGroup)
-    private static final io.ceresdb.proto.Storage.FieldGroup DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new io.ceresdb.proto.Storage.FieldGroup();
-    }
-
-    public static io.ceresdb.proto.Storage.FieldGroup getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<FieldGroup>
-        PARSER = new com.google.protobuf.AbstractParser<FieldGroup>() {
-      @java.lang.Override
-      public FieldGroup parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new FieldGroup(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<FieldGroup> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<FieldGroup> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.FieldGroup getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface TagOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:storage.Tag)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>uint32 name_index = 1;</code>
-     * @return The nameIndex.
-     */
-    int getNameIndex();
-
-    /**
-     * <code>.storage.Value value = 2;</code>
-     * @return Whether the value field is set.
-     */
-    boolean hasValue();
-    /**
-     * <code>.storage.Value value = 2;</code>
-     * @return The value.
-     */
-    io.ceresdb.proto.Storage.Value getValue();
-    /**
-     * <code>.storage.Value value = 2;</code>
-     */
-    io.ceresdb.proto.Storage.ValueOrBuilder getValueOrBuilder();
-  }
-  /**
-   * Protobuf type {@code storage.Tag}
-   */
-  public static final class Tag extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:storage.Tag)
-      TagOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use Tag.newBuilder() to construct.
-    private Tag(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private Tag() {
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new Tag();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private Tag(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      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;
-            case 8: {
-
-              nameIndex_ = input.readUInt32();
-              break;
-            }
-            case 18: {
-              io.ceresdb.proto.Storage.Value.Builder subBuilder = null;
-              if (value_ != null) {
-                subBuilder = value_.toBuilder();
-              }
-              value_ = input.readMessage(io.ceresdb.proto.Storage.Value.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(value_);
-                value_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (com.google.protobuf.UninitializedMessageException e) {
-        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.ceresdb.proto.Storage.internal_static_storage_Tag_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.ceresdb.proto.Storage.internal_static_storage_Tag_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.ceresdb.proto.Storage.Tag.class, io.ceresdb.proto.Storage.Tag.Builder.class);
-    }
-
-    public static final int NAME_INDEX_FIELD_NUMBER = 1;
-    private int nameIndex_;
-    /**
-     * <code>uint32 name_index = 1;</code>
-     * @return The nameIndex.
-     */
-    @java.lang.Override
-    public int getNameIndex() {
-      return nameIndex_;
-    }
-
-    public static final int VALUE_FIELD_NUMBER = 2;
-    private io.ceresdb.proto.Storage.Value value_;
-    /**
-     * <code>.storage.Value value = 2;</code>
-     * @return Whether the value field is set.
-     */
-    @java.lang.Override
-    public boolean hasValue() {
-      return value_ != null;
-    }
-    /**
-     * <code>.storage.Value value = 2;</code>
-     * @return The value.
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.Value getValue() {
-      return value_ == null ? io.ceresdb.proto.Storage.Value.getDefaultInstance() : value_;
-    }
-    /**
-     * <code>.storage.Value value = 2;</code>
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.ValueOrBuilder getValueOrBuilder() {
-      return getValue();
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (nameIndex_ != 0) {
-        output.writeUInt32(1, nameIndex_);
-      }
-      if (value_ != null) {
-        output.writeMessage(2, getValue());
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (nameIndex_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(1, nameIndex_);
-      }
-      if (value_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getValue());
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof io.ceresdb.proto.Storage.Tag)) {
-        return super.equals(obj);
-      }
-      io.ceresdb.proto.Storage.Tag other = (io.ceresdb.proto.Storage.Tag) obj;
-
-      if (getNameIndex()
-          != other.getNameIndex()) return false;
-      if (hasValue() != other.hasValue()) return false;
-      if (hasValue()) {
-        if (!getValue()
-            .equals(other.getValue())) return false;
-      }
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + NAME_INDEX_FIELD_NUMBER;
-      hash = (53 * hash) + getNameIndex();
-      if (hasValue()) {
-        hash = (37 * hash) + VALUE_FIELD_NUMBER;
-        hash = (53 * hash) + getValue().hashCode();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static io.ceresdb.proto.Storage.Tag parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.Tag parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Tag parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.Tag parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Tag parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.Tag parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Tag parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.Tag parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Tag parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.Tag parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.Tag parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.Tag parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(io.ceresdb.proto.Storage.Tag prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code storage.Tag}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:storage.Tag)
-        io.ceresdb.proto.Storage.TagOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.ceresdb.proto.Storage.internal_static_storage_Tag_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.ceresdb.proto.Storage.internal_static_storage_Tag_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.ceresdb.proto.Storage.Tag.class, io.ceresdb.proto.Storage.Tag.Builder.class);
-      }
-
-      // Construct using io.ceresdb.proto.Storage.Tag.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        nameIndex_ = 0;
-
-        if (valueBuilder_ == null) {
-          value_ = null;
-        } else {
-          value_ = null;
-          valueBuilder_ = null;
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.ceresdb.proto.Storage.internal_static_storage_Tag_descriptor;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.Tag getDefaultInstanceForType() {
-        return io.ceresdb.proto.Storage.Tag.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.Tag build() {
-        io.ceresdb.proto.Storage.Tag result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.Tag buildPartial() {
-        io.ceresdb.proto.Storage.Tag result = new io.ceresdb.proto.Storage.Tag(this);
-        result.nameIndex_ = nameIndex_;
-        if (valueBuilder_ == null) {
-          result.value_ = value_;
-        } else {
-          result.value_ = valueBuilder_.build();
-        }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.ceresdb.proto.Storage.Tag) {
-          return mergeFrom((io.ceresdb.proto.Storage.Tag)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.ceresdb.proto.Storage.Tag other) {
-        if (other == io.ceresdb.proto.Storage.Tag.getDefaultInstance()) return this;
-        if (other.getNameIndex() != 0) {
-          setNameIndex(other.getNameIndex());
-        }
-        if (other.hasValue()) {
-          mergeValue(other.getValue());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.ceresdb.proto.Storage.Tag parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.ceresdb.proto.Storage.Tag) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private int nameIndex_ ;
-      /**
-       * <code>uint32 name_index = 1;</code>
-       * @return The nameIndex.
-       */
-      @java.lang.Override
-      public int getNameIndex() {
-        return nameIndex_;
-      }
-      /**
-       * <code>uint32 name_index = 1;</code>
-       * @param value The nameIndex to set.
-       * @return This builder for chaining.
-       */
-      public Builder setNameIndex(int value) {
-        
-        nameIndex_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 name_index = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearNameIndex() {
-        
-        nameIndex_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private io.ceresdb.proto.Storage.Value value_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          io.ceresdb.proto.Storage.Value, io.ceresdb.proto.Storage.Value.Builder, io.ceresdb.proto.Storage.ValueOrBuilder> valueBuilder_;
-      /**
-       * <code>.storage.Value value = 2;</code>
-       * @return Whether the value field is set.
-       */
-      public boolean hasValue() {
-        return valueBuilder_ != null || value_ != null;
-      }
-      /**
-       * <code>.storage.Value value = 2;</code>
-       * @return The value.
-       */
-      public io.ceresdb.proto.Storage.Value getValue() {
-        if (valueBuilder_ == null) {
-          return value_ == null ? io.ceresdb.proto.Storage.Value.getDefaultInstance() : value_;
-        } else {
-          return valueBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.storage.Value value = 2;</code>
-       */
-      public Builder setValue(io.ceresdb.proto.Storage.Value value) {
-        if (valueBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          value_ = value;
-          onChanged();
-        } else {
-          valueBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.Value value = 2;</code>
-       */
-      public Builder setValue(
-          io.ceresdb.proto.Storage.Value.Builder builderForValue) {
-        if (valueBuilder_ == null) {
-          value_ = builderForValue.build();
-          onChanged();
-        } else {
-          valueBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.Value value = 2;</code>
-       */
-      public Builder mergeValue(io.ceresdb.proto.Storage.Value value) {
-        if (valueBuilder_ == null) {
-          if (value_ != null) {
-            value_ =
-              io.ceresdb.proto.Storage.Value.newBuilder(value_).mergeFrom(value).buildPartial();
-          } else {
-            value_ = value;
-          }
-          onChanged();
-        } else {
-          valueBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.Value value = 2;</code>
-       */
-      public Builder clearValue() {
-        if (valueBuilder_ == null) {
-          value_ = null;
-          onChanged();
-        } else {
-          value_ = null;
-          valueBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.Value value = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.Value.Builder getValueBuilder() {
-        
-        onChanged();
-        return getValueFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.storage.Value value = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.ValueOrBuilder getValueOrBuilder() {
-        if (valueBuilder_ != null) {
-          return valueBuilder_.getMessageOrBuilder();
-        } else {
-          return value_ == null ?
-              io.ceresdb.proto.Storage.Value.getDefaultInstance() : value_;
-        }
-      }
-      /**
-       * <code>.storage.Value value = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          io.ceresdb.proto.Storage.Value, io.ceresdb.proto.Storage.Value.Builder, io.ceresdb.proto.Storage.ValueOrBuilder> 
-          getValueFieldBuilder() {
-        if (valueBuilder_ == null) {
-          valueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              io.ceresdb.proto.Storage.Value, io.ceresdb.proto.Storage.Value.Builder, io.ceresdb.proto.Storage.ValueOrBuilder>(
-                  getValue(),
-                  getParentForChildren(),
-                  isClean());
-          value_ = null;
-        }
-        return valueBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:storage.Tag)
-    }
-
-    // @@protoc_insertion_point(class_scope:storage.Tag)
-    private static final io.ceresdb.proto.Storage.Tag DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new io.ceresdb.proto.Storage.Tag();
-    }
-
-    public static io.ceresdb.proto.Storage.Tag getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<Tag>
-        PARSER = new com.google.protobuf.AbstractParser<Tag>() {
-      @java.lang.Override
-      public Tag parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Tag(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<Tag> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<Tag> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.Tag getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface WriteEntryOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:storage.WriteEntry)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>repeated .storage.Tag tags = 1;</code>
-     */
-    java.util.List<io.ceresdb.proto.Storage.Tag> 
-        getTagsList();
-    /**
-     * <code>repeated .storage.Tag tags = 1;</code>
-     */
-    io.ceresdb.proto.Storage.Tag getTags(int index);
-    /**
-     * <code>repeated .storage.Tag tags = 1;</code>
-     */
-    int getTagsCount();
-    /**
-     * <code>repeated .storage.Tag tags = 1;</code>
-     */
-    java.util.List<? extends io.ceresdb.proto.Storage.TagOrBuilder> 
-        getTagsOrBuilderList();
-    /**
-     * <code>repeated .storage.Tag tags = 1;</code>
-     */
-    io.ceresdb.proto.Storage.TagOrBuilder getTagsOrBuilder(
-        int index);
-
-    /**
-     * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-     */
-    java.util.List<io.ceresdb.proto.Storage.FieldGroup> 
-        getFieldGroupsList();
-    /**
-     * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-     */
-    io.ceresdb.proto.Storage.FieldGroup getFieldGroups(int index);
-    /**
-     * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-     */
-    int getFieldGroupsCount();
-    /**
-     * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-     */
-    java.util.List<? extends io.ceresdb.proto.Storage.FieldGroupOrBuilder> 
-        getFieldGroupsOrBuilderList();
-    /**
-     * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-     */
-    io.ceresdb.proto.Storage.FieldGroupOrBuilder getFieldGroupsOrBuilder(
-        int index);
-  }
-  /**
-   * Protobuf type {@code storage.WriteEntry}
-   */
-  public static final class WriteEntry extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:storage.WriteEntry)
-      WriteEntryOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use WriteEntry.newBuilder() to construct.
-    private WriteEntry(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private WriteEntry() {
-      tags_ = java.util.Collections.emptyList();
-      fieldGroups_ = java.util.Collections.emptyList();
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new WriteEntry();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private WriteEntry(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      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;
-            case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                tags_ = new java.util.ArrayList<io.ceresdb.proto.Storage.Tag>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              tags_.add(
-                  input.readMessage(io.ceresdb.proto.Storage.Tag.parser(), extensionRegistry));
-              break;
-            }
-            case 18: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                fieldGroups_ = new java.util.ArrayList<io.ceresdb.proto.Storage.FieldGroup>();
-                mutable_bitField0_ |= 0x00000002;
-              }
-              fieldGroups_.add(
-                  input.readMessage(io.ceresdb.proto.Storage.FieldGroup.parser(), extensionRegistry));
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (com.google.protobuf.UninitializedMessageException e) {
-        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          tags_ = java.util.Collections.unmodifiableList(tags_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          fieldGroups_ = java.util.Collections.unmodifiableList(fieldGroups_);
-        }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.ceresdb.proto.Storage.internal_static_storage_WriteEntry_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.ceresdb.proto.Storage.internal_static_storage_WriteEntry_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.ceresdb.proto.Storage.WriteEntry.class, io.ceresdb.proto.Storage.WriteEntry.Builder.class);
-    }
-
-    public static final int TAGS_FIELD_NUMBER = 1;
-    private java.util.List<io.ceresdb.proto.Storage.Tag> tags_;
-    /**
-     * <code>repeated .storage.Tag tags = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<io.ceresdb.proto.Storage.Tag> getTagsList() {
-      return tags_;
-    }
-    /**
-     * <code>repeated .storage.Tag tags = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends io.ceresdb.proto.Storage.TagOrBuilder> 
-        getTagsOrBuilderList() {
-      return tags_;
-    }
-    /**
-     * <code>repeated .storage.Tag tags = 1;</code>
-     */
-    @java.lang.Override
-    public int getTagsCount() {
-      return tags_.size();
-    }
-    /**
-     * <code>repeated .storage.Tag tags = 1;</code>
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.Tag getTags(int index) {
-      return tags_.get(index);
-    }
-    /**
-     * <code>repeated .storage.Tag tags = 1;</code>
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.TagOrBuilder getTagsOrBuilder(
-        int index) {
-      return tags_.get(index);
-    }
-
-    public static final int FIELD_GROUPS_FIELD_NUMBER = 2;
-    private java.util.List<io.ceresdb.proto.Storage.FieldGroup> fieldGroups_;
-    /**
-     * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-     */
-    @java.lang.Override
-    public java.util.List<io.ceresdb.proto.Storage.FieldGroup> getFieldGroupsList() {
-      return fieldGroups_;
-    }
-    /**
-     * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends io.ceresdb.proto.Storage.FieldGroupOrBuilder> 
-        getFieldGroupsOrBuilderList() {
-      return fieldGroups_;
-    }
-    /**
-     * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-     */
-    @java.lang.Override
-    public int getFieldGroupsCount() {
-      return fieldGroups_.size();
-    }
-    /**
-     * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.FieldGroup getFieldGroups(int index) {
-      return fieldGroups_.get(index);
-    }
-    /**
-     * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.FieldGroupOrBuilder getFieldGroupsOrBuilder(
-        int index) {
-      return fieldGroups_.get(index);
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      for (int i = 0; i < tags_.size(); i++) {
-        output.writeMessage(1, tags_.get(i));
-      }
-      for (int i = 0; i < fieldGroups_.size(); i++) {
-        output.writeMessage(2, fieldGroups_.get(i));
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      for (int i = 0; i < tags_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, tags_.get(i));
-      }
-      for (int i = 0; i < fieldGroups_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, fieldGroups_.get(i));
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof io.ceresdb.proto.Storage.WriteEntry)) {
-        return super.equals(obj);
-      }
-      io.ceresdb.proto.Storage.WriteEntry other = (io.ceresdb.proto.Storage.WriteEntry) obj;
-
-      if (!getTagsList()
-          .equals(other.getTagsList())) return false;
-      if (!getFieldGroupsList()
-          .equals(other.getFieldGroupsList())) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (getTagsCount() > 0) {
-        hash = (37 * hash) + TAGS_FIELD_NUMBER;
-        hash = (53 * hash) + getTagsList().hashCode();
-      }
-      if (getFieldGroupsCount() > 0) {
-        hash = (37 * hash) + FIELD_GROUPS_FIELD_NUMBER;
-        hash = (53 * hash) + getFieldGroupsList().hashCode();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static io.ceresdb.proto.Storage.WriteEntry parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.WriteEntry parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteEntry parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.WriteEntry parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteEntry parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.WriteEntry parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteEntry parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.WriteEntry parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteEntry parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.WriteEntry parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteEntry parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.WriteEntry parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(io.ceresdb.proto.Storage.WriteEntry prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code storage.WriteEntry}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:storage.WriteEntry)
-        io.ceresdb.proto.Storage.WriteEntryOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.ceresdb.proto.Storage.internal_static_storage_WriteEntry_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.ceresdb.proto.Storage.internal_static_storage_WriteEntry_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.ceresdb.proto.Storage.WriteEntry.class, io.ceresdb.proto.Storage.WriteEntry.Builder.class);
-      }
-
-      // Construct using io.ceresdb.proto.Storage.WriteEntry.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-          getTagsFieldBuilder();
-          getFieldGroupsFieldBuilder();
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (tagsBuilder_ == null) {
-          tags_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          tagsBuilder_.clear();
-        }
-        if (fieldGroupsBuilder_ == null) {
-          fieldGroups_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-        } else {
-          fieldGroupsBuilder_.clear();
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.ceresdb.proto.Storage.internal_static_storage_WriteEntry_descriptor;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.WriteEntry getDefaultInstanceForType() {
-        return io.ceresdb.proto.Storage.WriteEntry.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.WriteEntry build() {
-        io.ceresdb.proto.Storage.WriteEntry result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.WriteEntry buildPartial() {
-        io.ceresdb.proto.Storage.WriteEntry result = new io.ceresdb.proto.Storage.WriteEntry(this);
-        int from_bitField0_ = bitField0_;
-        if (tagsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            tags_ = java.util.Collections.unmodifiableList(tags_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.tags_ = tags_;
-        } else {
-          result.tags_ = tagsBuilder_.build();
-        }
-        if (fieldGroupsBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            fieldGroups_ = java.util.Collections.unmodifiableList(fieldGroups_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.fieldGroups_ = fieldGroups_;
-        } else {
-          result.fieldGroups_ = fieldGroupsBuilder_.build();
-        }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.ceresdb.proto.Storage.WriteEntry) {
-          return mergeFrom((io.ceresdb.proto.Storage.WriteEntry)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.ceresdb.proto.Storage.WriteEntry other) {
-        if (other == io.ceresdb.proto.Storage.WriteEntry.getDefaultInstance()) return this;
-        if (tagsBuilder_ == null) {
-          if (!other.tags_.isEmpty()) {
-            if (tags_.isEmpty()) {
-              tags_ = other.tags_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureTagsIsMutable();
-              tags_.addAll(other.tags_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.tags_.isEmpty()) {
-            if (tagsBuilder_.isEmpty()) {
-              tagsBuilder_.dispose();
-              tagsBuilder_ = null;
-              tags_ = other.tags_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              tagsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getTagsFieldBuilder() : null;
-            } else {
-              tagsBuilder_.addAllMessages(other.tags_);
-            }
-          }
-        }
-        if (fieldGroupsBuilder_ == null) {
-          if (!other.fieldGroups_.isEmpty()) {
-            if (fieldGroups_.isEmpty()) {
-              fieldGroups_ = other.fieldGroups_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureFieldGroupsIsMutable();
-              fieldGroups_.addAll(other.fieldGroups_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.fieldGroups_.isEmpty()) {
-            if (fieldGroupsBuilder_.isEmpty()) {
-              fieldGroupsBuilder_.dispose();
-              fieldGroupsBuilder_ = null;
-              fieldGroups_ = other.fieldGroups_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              fieldGroupsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getFieldGroupsFieldBuilder() : null;
-            } else {
-              fieldGroupsBuilder_.addAllMessages(other.fieldGroups_);
-            }
-          }
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.ceresdb.proto.Storage.WriteEntry parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.ceresdb.proto.Storage.WriteEntry) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private java.util.List<io.ceresdb.proto.Storage.Tag> tags_ =
-        java.util.Collections.emptyList();
-      private void ensureTagsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          tags_ = new java.util.ArrayList<io.ceresdb.proto.Storage.Tag>(tags_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          io.ceresdb.proto.Storage.Tag, io.ceresdb.proto.Storage.Tag.Builder, io.ceresdb.proto.Storage.TagOrBuilder> tagsBuilder_;
-
-      /**
-       * <code>repeated .storage.Tag tags = 1;</code>
-       */
-      public java.util.List<io.ceresdb.proto.Storage.Tag> getTagsList() {
-        if (tagsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(tags_);
-        } else {
-          return tagsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .storage.Tag tags = 1;</code>
-       */
-      public int getTagsCount() {
-        if (tagsBuilder_ == null) {
-          return tags_.size();
-        } else {
-          return tagsBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .storage.Tag tags = 1;</code>
-       */
-      public io.ceresdb.proto.Storage.Tag getTags(int index) {
-        if (tagsBuilder_ == null) {
-          return tags_.get(index);
-        } else {
-          return tagsBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .storage.Tag tags = 1;</code>
-       */
-      public Builder setTags(
-          int index, io.ceresdb.proto.Storage.Tag value) {
-        if (tagsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureTagsIsMutable();
-          tags_.set(index, value);
-          onChanged();
-        } else {
-          tagsBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Tag tags = 1;</code>
-       */
-      public Builder setTags(
-          int index, io.ceresdb.proto.Storage.Tag.Builder builderForValue) {
-        if (tagsBuilder_ == null) {
-          ensureTagsIsMutable();
-          tags_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          tagsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Tag tags = 1;</code>
-       */
-      public Builder addTags(io.ceresdb.proto.Storage.Tag value) {
-        if (tagsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureTagsIsMutable();
-          tags_.add(value);
-          onChanged();
-        } else {
-          tagsBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Tag tags = 1;</code>
-       */
-      public Builder addTags(
-          int index, io.ceresdb.proto.Storage.Tag value) {
-        if (tagsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureTagsIsMutable();
-          tags_.add(index, value);
-          onChanged();
-        } else {
-          tagsBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Tag tags = 1;</code>
-       */
-      public Builder addTags(
-          io.ceresdb.proto.Storage.Tag.Builder builderForValue) {
-        if (tagsBuilder_ == null) {
-          ensureTagsIsMutable();
-          tags_.add(builderForValue.build());
-          onChanged();
-        } else {
-          tagsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Tag tags = 1;</code>
-       */
-      public Builder addTags(
-          int index, io.ceresdb.proto.Storage.Tag.Builder builderForValue) {
-        if (tagsBuilder_ == null) {
-          ensureTagsIsMutable();
-          tags_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          tagsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Tag tags = 1;</code>
-       */
-      public Builder addAllTags(
-          java.lang.Iterable<? extends io.ceresdb.proto.Storage.Tag> values) {
-        if (tagsBuilder_ == null) {
-          ensureTagsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, tags_);
-          onChanged();
-        } else {
-          tagsBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Tag tags = 1;</code>
-       */
-      public Builder clearTags() {
-        if (tagsBuilder_ == null) {
-          tags_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          tagsBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Tag tags = 1;</code>
-       */
-      public Builder removeTags(int index) {
-        if (tagsBuilder_ == null) {
-          ensureTagsIsMutable();
-          tags_.remove(index);
-          onChanged();
-        } else {
-          tagsBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.Tag tags = 1;</code>
-       */
-      public io.ceresdb.proto.Storage.Tag.Builder getTagsBuilder(
-          int index) {
-        return getTagsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .storage.Tag tags = 1;</code>
-       */
-      public io.ceresdb.proto.Storage.TagOrBuilder getTagsOrBuilder(
-          int index) {
-        if (tagsBuilder_ == null) {
-          return tags_.get(index);  } else {
-          return tagsBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .storage.Tag tags = 1;</code>
-       */
-      public java.util.List<? extends io.ceresdb.proto.Storage.TagOrBuilder> 
-           getTagsOrBuilderList() {
-        if (tagsBuilder_ != null) {
-          return tagsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(tags_);
-        }
-      }
-      /**
-       * <code>repeated .storage.Tag tags = 1;</code>
-       */
-      public io.ceresdb.proto.Storage.Tag.Builder addTagsBuilder() {
-        return getTagsFieldBuilder().addBuilder(
-            io.ceresdb.proto.Storage.Tag.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .storage.Tag tags = 1;</code>
-       */
-      public io.ceresdb.proto.Storage.Tag.Builder addTagsBuilder(
-          int index) {
-        return getTagsFieldBuilder().addBuilder(
-            index, io.ceresdb.proto.Storage.Tag.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .storage.Tag tags = 1;</code>
-       */
-      public java.util.List<io.ceresdb.proto.Storage.Tag.Builder> 
-           getTagsBuilderList() {
-        return getTagsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          io.ceresdb.proto.Storage.Tag, io.ceresdb.proto.Storage.Tag.Builder, io.ceresdb.proto.Storage.TagOrBuilder> 
-          getTagsFieldBuilder() {
-        if (tagsBuilder_ == null) {
-          tagsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              io.ceresdb.proto.Storage.Tag, io.ceresdb.proto.Storage.Tag.Builder, io.ceresdb.proto.Storage.TagOrBuilder>(
-                  tags_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          tags_ = null;
-        }
-        return tagsBuilder_;
-      }
-
-      private java.util.List<io.ceresdb.proto.Storage.FieldGroup> fieldGroups_ =
-        java.util.Collections.emptyList();
-      private void ensureFieldGroupsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          fieldGroups_ = new java.util.ArrayList<io.ceresdb.proto.Storage.FieldGroup>(fieldGroups_);
-          bitField0_ |= 0x00000002;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          io.ceresdb.proto.Storage.FieldGroup, io.ceresdb.proto.Storage.FieldGroup.Builder, io.ceresdb.proto.Storage.FieldGroupOrBuilder> fieldGroupsBuilder_;
-
-      /**
-       * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-       */
-      public java.util.List<io.ceresdb.proto.Storage.FieldGroup> getFieldGroupsList() {
-        if (fieldGroupsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(fieldGroups_);
-        } else {
-          return fieldGroupsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-       */
-      public int getFieldGroupsCount() {
-        if (fieldGroupsBuilder_ == null) {
-          return fieldGroups_.size();
-        } else {
-          return fieldGroupsBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.FieldGroup getFieldGroups(int index) {
-        if (fieldGroupsBuilder_ == null) {
-          return fieldGroups_.get(index);
-        } else {
-          return fieldGroupsBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-       */
-      public Builder setFieldGroups(
-          int index, io.ceresdb.proto.Storage.FieldGroup value) {
-        if (fieldGroupsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureFieldGroupsIsMutable();
-          fieldGroups_.set(index, value);
-          onChanged();
-        } else {
-          fieldGroupsBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-       */
-      public Builder setFieldGroups(
-          int index, io.ceresdb.proto.Storage.FieldGroup.Builder builderForValue) {
-        if (fieldGroupsBuilder_ == null) {
-          ensureFieldGroupsIsMutable();
-          fieldGroups_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          fieldGroupsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-       */
-      public Builder addFieldGroups(io.ceresdb.proto.Storage.FieldGroup value) {
-        if (fieldGroupsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureFieldGroupsIsMutable();
-          fieldGroups_.add(value);
-          onChanged();
-        } else {
-          fieldGroupsBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-       */
-      public Builder addFieldGroups(
-          int index, io.ceresdb.proto.Storage.FieldGroup value) {
-        if (fieldGroupsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureFieldGroupsIsMutable();
-          fieldGroups_.add(index, value);
-          onChanged();
-        } else {
-          fieldGroupsBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-       */
-      public Builder addFieldGroups(
-          io.ceresdb.proto.Storage.FieldGroup.Builder builderForValue) {
-        if (fieldGroupsBuilder_ == null) {
-          ensureFieldGroupsIsMutable();
-          fieldGroups_.add(builderForValue.build());
-          onChanged();
-        } else {
-          fieldGroupsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-       */
-      public Builder addFieldGroups(
-          int index, io.ceresdb.proto.Storage.FieldGroup.Builder builderForValue) {
-        if (fieldGroupsBuilder_ == null) {
-          ensureFieldGroupsIsMutable();
-          fieldGroups_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          fieldGroupsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-       */
-      public Builder addAllFieldGroups(
-          java.lang.Iterable<? extends io.ceresdb.proto.Storage.FieldGroup> values) {
-        if (fieldGroupsBuilder_ == null) {
-          ensureFieldGroupsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, fieldGroups_);
-          onChanged();
-        } else {
-          fieldGroupsBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-       */
-      public Builder clearFieldGroups() {
-        if (fieldGroupsBuilder_ == null) {
-          fieldGroups_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-          onChanged();
-        } else {
-          fieldGroupsBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-       */
-      public Builder removeFieldGroups(int index) {
-        if (fieldGroupsBuilder_ == null) {
-          ensureFieldGroupsIsMutable();
-          fieldGroups_.remove(index);
-          onChanged();
-        } else {
-          fieldGroupsBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.FieldGroup.Builder getFieldGroupsBuilder(
-          int index) {
-        return getFieldGroupsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.FieldGroupOrBuilder getFieldGroupsOrBuilder(
-          int index) {
-        if (fieldGroupsBuilder_ == null) {
-          return fieldGroups_.get(index);  } else {
-          return fieldGroupsBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-       */
-      public java.util.List<? extends io.ceresdb.proto.Storage.FieldGroupOrBuilder> 
-           getFieldGroupsOrBuilderList() {
-        if (fieldGroupsBuilder_ != null) {
-          return fieldGroupsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(fieldGroups_);
-        }
-      }
-      /**
-       * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.FieldGroup.Builder addFieldGroupsBuilder() {
-        return getFieldGroupsFieldBuilder().addBuilder(
-            io.ceresdb.proto.Storage.FieldGroup.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-       */
-      public io.ceresdb.proto.Storage.FieldGroup.Builder addFieldGroupsBuilder(
-          int index) {
-        return getFieldGroupsFieldBuilder().addBuilder(
-            index, io.ceresdb.proto.Storage.FieldGroup.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .storage.FieldGroup field_groups = 2;</code>
-       */
-      public java.util.List<io.ceresdb.proto.Storage.FieldGroup.Builder> 
-           getFieldGroupsBuilderList() {
-        return getFieldGroupsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          io.ceresdb.proto.Storage.FieldGroup, io.ceresdb.proto.Storage.FieldGroup.Builder, io.ceresdb.proto.Storage.FieldGroupOrBuilder> 
-          getFieldGroupsFieldBuilder() {
-        if (fieldGroupsBuilder_ == null) {
-          fieldGroupsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              io.ceresdb.proto.Storage.FieldGroup, io.ceresdb.proto.Storage.FieldGroup.Builder, io.ceresdb.proto.Storage.FieldGroupOrBuilder>(
-                  fieldGroups_,
-                  ((bitField0_ & 0x00000002) != 0),
-                  getParentForChildren(),
-                  isClean());
-          fieldGroups_ = null;
-        }
-        return fieldGroupsBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:storage.WriteEntry)
-    }
-
-    // @@protoc_insertion_point(class_scope:storage.WriteEntry)
-    private static final io.ceresdb.proto.Storage.WriteEntry DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new io.ceresdb.proto.Storage.WriteEntry();
-    }
-
-    public static io.ceresdb.proto.Storage.WriteEntry getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<WriteEntry>
-        PARSER = new com.google.protobuf.AbstractParser<WriteEntry>() {
-      @java.lang.Override
-      public WriteEntry parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new WriteEntry(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<WriteEntry> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<WriteEntry> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.WriteEntry getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface WriteMetricOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:storage.WriteMetric)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>string metric = 1;</code>
-     * @return The metric.
-     */
-    java.lang.String getMetric();
-    /**
-     * <code>string metric = 1;</code>
-     * @return The bytes for metric.
-     */
-    com.google.protobuf.ByteString
-        getMetricBytes();
-
-    /**
-     * <code>repeated string tag_names = 2;</code>
-     * @return A list containing the tagNames.
-     */
-    java.util.List<java.lang.String>
-        getTagNamesList();
-    /**
-     * <code>repeated string tag_names = 2;</code>
-     * @return The count of tagNames.
-     */
-    int getTagNamesCount();
-    /**
-     * <code>repeated string tag_names = 2;</code>
-     * @param index The index of the element to return.
-     * @return The tagNames at the given index.
-     */
-    java.lang.String getTagNames(int index);
-    /**
-     * <code>repeated string tag_names = 2;</code>
-     * @param index The index of the value to return.
-     * @return The bytes of the tagNames at the given index.
-     */
-    com.google.protobuf.ByteString
-        getTagNamesBytes(int index);
-
-    /**
-     * <code>repeated string field_names = 3;</code>
-     * @return A list containing the fieldNames.
-     */
-    java.util.List<java.lang.String>
-        getFieldNamesList();
-    /**
-     * <code>repeated string field_names = 3;</code>
-     * @return The count of fieldNames.
-     */
-    int getFieldNamesCount();
-    /**
-     * <code>repeated string field_names = 3;</code>
-     * @param index The index of the element to return.
-     * @return The fieldNames at the given index.
-     */
-    java.lang.String getFieldNames(int index);
-    /**
-     * <code>repeated string field_names = 3;</code>
-     * @param index The index of the value to return.
-     * @return The bytes of the fieldNames at the given index.
-     */
-    com.google.protobuf.ByteString
-        getFieldNamesBytes(int index);
-
-    /**
-     * <code>repeated .storage.WriteEntry entries = 4;</code>
-     */
-    java.util.List<io.ceresdb.proto.Storage.WriteEntry> 
-        getEntriesList();
-    /**
-     * <code>repeated .storage.WriteEntry entries = 4;</code>
-     */
-    io.ceresdb.proto.Storage.WriteEntry getEntries(int index);
-    /**
-     * <code>repeated .storage.WriteEntry entries = 4;</code>
-     */
-    int getEntriesCount();
-    /**
-     * <code>repeated .storage.WriteEntry entries = 4;</code>
-     */
-    java.util.List<? extends io.ceresdb.proto.Storage.WriteEntryOrBuilder> 
-        getEntriesOrBuilderList();
-    /**
-     * <code>repeated .storage.WriteEntry entries = 4;</code>
-     */
-    io.ceresdb.proto.Storage.WriteEntryOrBuilder getEntriesOrBuilder(
-        int index);
-  }
-  /**
-   * Protobuf type {@code storage.WriteMetric}
-   */
-  public static final class WriteMetric extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:storage.WriteMetric)
-      WriteMetricOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use WriteMetric.newBuilder() to construct.
-    private WriteMetric(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private WriteMetric() {
-      metric_ = "";
-      tagNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-      fieldNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-      entries_ = java.util.Collections.emptyList();
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new WriteMetric();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private WriteMetric(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      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;
-            case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              metric_ = s;
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                tagNames_ = new com.google.protobuf.LazyStringArrayList();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              tagNames_.add(s);
-              break;
-            }
-            case 26: {
-              java.lang.String s = input.readStringRequireUtf8();
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                fieldNames_ = new com.google.protobuf.LazyStringArrayList();
-                mutable_bitField0_ |= 0x00000002;
-              }
-              fieldNames_.add(s);
-              break;
-            }
-            case 34: {
-              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
-                entries_ = new java.util.ArrayList<io.ceresdb.proto.Storage.WriteEntry>();
-                mutable_bitField0_ |= 0x00000004;
-              }
-              entries_.add(
-                  input.readMessage(io.ceresdb.proto.Storage.WriteEntry.parser(), extensionRegistry));
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (com.google.protobuf.UninitializedMessageException e) {
-        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          tagNames_ = tagNames_.getUnmodifiableView();
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          fieldNames_ = fieldNames_.getUnmodifiableView();
-        }
-        if (((mutable_bitField0_ & 0x00000004) != 0)) {
-          entries_ = java.util.Collections.unmodifiableList(entries_);
-        }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.ceresdb.proto.Storage.internal_static_storage_WriteMetric_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.ceresdb.proto.Storage.internal_static_storage_WriteMetric_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.ceresdb.proto.Storage.WriteMetric.class, io.ceresdb.proto.Storage.WriteMetric.Builder.class);
-    }
-
-    public static final int METRIC_FIELD_NUMBER = 1;
-    private volatile java.lang.Object metric_;
-    /**
-     * <code>string metric = 1;</code>
-     * @return The metric.
-     */
-    @java.lang.Override
-    public java.lang.String getMetric() {
-      java.lang.Object ref = metric_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        metric_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string metric = 1;</code>
-     * @return The bytes for metric.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getMetricBytes() {
-      java.lang.Object ref = metric_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        metric_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-
-    public static final int TAG_NAMES_FIELD_NUMBER = 2;
-    private com.google.protobuf.LazyStringList tagNames_;
-    /**
-     * <code>repeated string tag_names = 2;</code>
-     * @return A list containing the tagNames.
-     */
-    public com.google.protobuf.ProtocolStringList
-        getTagNamesList() {
-      return tagNames_;
-    }
-    /**
-     * <code>repeated string tag_names = 2;</code>
-     * @return The count of tagNames.
-     */
-    public int getTagNamesCount() {
-      return tagNames_.size();
-    }
-    /**
-     * <code>repeated string tag_names = 2;</code>
-     * @param index The index of the element to return.
-     * @return The tagNames at the given index.
-     */
-    public java.lang.String getTagNames(int index) {
-      return tagNames_.get(index);
-    }
-    /**
-     * <code>repeated string tag_names = 2;</code>
-     * @param index The index of the value to return.
-     * @return The bytes of the tagNames at the given index.
-     */
-    public com.google.protobuf.ByteString
-        getTagNamesBytes(int index) {
-      return tagNames_.getByteString(index);
-    }
-
-    public static final int FIELD_NAMES_FIELD_NUMBER = 3;
-    private com.google.protobuf.LazyStringList fieldNames_;
-    /**
-     * <code>repeated string field_names = 3;</code>
-     * @return A list containing the fieldNames.
-     */
-    public com.google.protobuf.ProtocolStringList
-        getFieldNamesList() {
-      return fieldNames_;
-    }
-    /**
-     * <code>repeated string field_names = 3;</code>
-     * @return The count of fieldNames.
-     */
-    public int getFieldNamesCount() {
-      return fieldNames_.size();
-    }
-    /**
-     * <code>repeated string field_names = 3;</code>
-     * @param index The index of the element to return.
-     * @return The fieldNames at the given index.
-     */
-    public java.lang.String getFieldNames(int index) {
-      return fieldNames_.get(index);
-    }
-    /**
-     * <code>repeated string field_names = 3;</code>
-     * @param index The index of the value to return.
-     * @return The bytes of the fieldNames at the given index.
-     */
-    public com.google.protobuf.ByteString
-        getFieldNamesBytes(int index) {
-      return fieldNames_.getByteString(index);
-    }
-
-    public static final int ENTRIES_FIELD_NUMBER = 4;
-    private java.util.List<io.ceresdb.proto.Storage.WriteEntry> entries_;
-    /**
-     * <code>repeated .storage.WriteEntry entries = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<io.ceresdb.proto.Storage.WriteEntry> getEntriesList() {
-      return entries_;
-    }
-    /**
-     * <code>repeated .storage.WriteEntry entries = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends io.ceresdb.proto.Storage.WriteEntryOrBuilder> 
-        getEntriesOrBuilderList() {
-      return entries_;
-    }
-    /**
-     * <code>repeated .storage.WriteEntry entries = 4;</code>
-     */
-    @java.lang.Override
-    public int getEntriesCount() {
-      return entries_.size();
-    }
-    /**
-     * <code>repeated .storage.WriteEntry entries = 4;</code>
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.WriteEntry getEntries(int index) {
-      return entries_.get(index);
-    }
-    /**
-     * <code>repeated .storage.WriteEntry entries = 4;</code>
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.WriteEntryOrBuilder getEntriesOrBuilder(
-        int index) {
-      return entries_.get(index);
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(metric_)) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, metric_);
-      }
-      for (int i = 0; i < tagNames_.size(); i++) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, tagNames_.getRaw(i));
-      }
-      for (int i = 0; i < fieldNames_.size(); i++) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, fieldNames_.getRaw(i));
-      }
-      for (int i = 0; i < entries_.size(); i++) {
-        output.writeMessage(4, entries_.get(i));
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(metric_)) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, metric_);
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < tagNames_.size(); i++) {
-          dataSize += computeStringSizeNoTag(tagNames_.getRaw(i));
-        }
-        size += dataSize;
-        size += 1 * getTagNamesList().size();
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < fieldNames_.size(); i++) {
-          dataSize += computeStringSizeNoTag(fieldNames_.getRaw(i));
-        }
-        size += dataSize;
-        size += 1 * getFieldNamesList().size();
-      }
-      for (int i = 0; i < entries_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, entries_.get(i));
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof io.ceresdb.proto.Storage.WriteMetric)) {
-        return super.equals(obj);
-      }
-      io.ceresdb.proto.Storage.WriteMetric other = (io.ceresdb.proto.Storage.WriteMetric) obj;
-
-      if (!getMetric()
-          .equals(other.getMetric())) return false;
-      if (!getTagNamesList()
-          .equals(other.getTagNamesList())) return false;
-      if (!getFieldNamesList()
-          .equals(other.getFieldNamesList())) return false;
-      if (!getEntriesList()
-          .equals(other.getEntriesList())) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + METRIC_FIELD_NUMBER;
-      hash = (53 * hash) + getMetric().hashCode();
-      if (getTagNamesCount() > 0) {
-        hash = (37 * hash) + TAG_NAMES_FIELD_NUMBER;
-        hash = (53 * hash) + getTagNamesList().hashCode();
-      }
-      if (getFieldNamesCount() > 0) {
-        hash = (37 * hash) + FIELD_NAMES_FIELD_NUMBER;
-        hash = (53 * hash) + getFieldNamesList().hashCode();
-      }
-      if (getEntriesCount() > 0) {
-        hash = (37 * hash) + ENTRIES_FIELD_NUMBER;
-        hash = (53 * hash) + getEntriesList().hashCode();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static io.ceresdb.proto.Storage.WriteMetric parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.WriteMetric parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteMetric parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.WriteMetric parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteMetric parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.WriteMetric parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteMetric parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.WriteMetric parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteMetric parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.WriteMetric parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteMetric parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.WriteMetric parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(io.ceresdb.proto.Storage.WriteMetric prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code storage.WriteMetric}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:storage.WriteMetric)
-        io.ceresdb.proto.Storage.WriteMetricOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.ceresdb.proto.Storage.internal_static_storage_WriteMetric_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.ceresdb.proto.Storage.internal_static_storage_WriteMetric_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.ceresdb.proto.Storage.WriteMetric.class, io.ceresdb.proto.Storage.WriteMetric.Builder.class);
-      }
-
-      // Construct using io.ceresdb.proto.Storage.WriteMetric.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-          getEntriesFieldBuilder();
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        metric_ = "";
-
-        tagNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        fieldNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        if (entriesBuilder_ == null) {
-          entries_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
-        } else {
-          entriesBuilder_.clear();
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.ceresdb.proto.Storage.internal_static_storage_WriteMetric_descriptor;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.WriteMetric getDefaultInstanceForType() {
-        return io.ceresdb.proto.Storage.WriteMetric.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.WriteMetric build() {
-        io.ceresdb.proto.Storage.WriteMetric result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.WriteMetric buildPartial() {
-        io.ceresdb.proto.Storage.WriteMetric result = new io.ceresdb.proto.Storage.WriteMetric(this);
-        int from_bitField0_ = bitField0_;
-        result.metric_ = metric_;
-        if (((bitField0_ & 0x00000001) != 0)) {
-          tagNames_ = tagNames_.getUnmodifiableView();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        }
-        result.tagNames_ = tagNames_;
-        if (((bitField0_ & 0x00000002) != 0)) {
-          fieldNames_ = fieldNames_.getUnmodifiableView();
-          bitField0_ = (bitField0_ & ~0x00000002);
-        }
-        result.fieldNames_ = fieldNames_;
-        if (entriesBuilder_ == null) {
-          if (((bitField0_ & 0x00000004) != 0)) {
-            entries_ = java.util.Collections.unmodifiableList(entries_);
-            bitField0_ = (bitField0_ & ~0x00000004);
-          }
-          result.entries_ = entries_;
-        } else {
-          result.entries_ = entriesBuilder_.build();
-        }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.ceresdb.proto.Storage.WriteMetric) {
-          return mergeFrom((io.ceresdb.proto.Storage.WriteMetric)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.ceresdb.proto.Storage.WriteMetric other) {
-        if (other == io.ceresdb.proto.Storage.WriteMetric.getDefaultInstance()) return this;
-        if (!other.getMetric().isEmpty()) {
-          metric_ = other.metric_;
-          onChanged();
-        }
-        if (!other.tagNames_.isEmpty()) {
-          if (tagNames_.isEmpty()) {
-            tagNames_ = other.tagNames_;
-            bitField0_ = (bitField0_ & ~0x00000001);
-          } else {
-            ensureTagNamesIsMutable();
-            tagNames_.addAll(other.tagNames_);
-          }
-          onChanged();
-        }
-        if (!other.fieldNames_.isEmpty()) {
-          if (fieldNames_.isEmpty()) {
-            fieldNames_ = other.fieldNames_;
-            bitField0_ = (bitField0_ & ~0x00000002);
-          } else {
-            ensureFieldNamesIsMutable();
-            fieldNames_.addAll(other.fieldNames_);
-          }
-          onChanged();
-        }
-        if (entriesBuilder_ == null) {
-          if (!other.entries_.isEmpty()) {
-            if (entries_.isEmpty()) {
-              entries_ = other.entries_;
-              bitField0_ = (bitField0_ & ~0x00000004);
-            } else {
-              ensureEntriesIsMutable();
-              entries_.addAll(other.entries_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.entries_.isEmpty()) {
-            if (entriesBuilder_.isEmpty()) {
-              entriesBuilder_.dispose();
-              entriesBuilder_ = null;
-              entries_ = other.entries_;
-              bitField0_ = (bitField0_ & ~0x00000004);
-              entriesBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getEntriesFieldBuilder() : null;
-            } else {
-              entriesBuilder_.addAllMessages(other.entries_);
-            }
-          }
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.ceresdb.proto.Storage.WriteMetric parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.ceresdb.proto.Storage.WriteMetric) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private java.lang.Object metric_ = "";
-      /**
-       * <code>string metric = 1;</code>
-       * @return The metric.
-       */
-      public java.lang.String getMetric() {
-        java.lang.Object ref = metric_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          metric_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string metric = 1;</code>
-       * @return The bytes for metric.
-       */
-      public com.google.protobuf.ByteString
-          getMetricBytes() {
-        java.lang.Object ref = metric_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          metric_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string metric = 1;</code>
-       * @param value The metric to set.
-       * @return This builder for chaining.
-       */
-      public Builder setMetric(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        metric_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string metric = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearMetric() {
-        
-        metric_ = getDefaultInstance().getMetric();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string metric = 1;</code>
-       * @param value The bytes for metric to set.
-       * @return This builder for chaining.
-       */
-      public Builder setMetricBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        metric_ = value;
-        onChanged();
-        return this;
-      }
-
-      private com.google.protobuf.LazyStringList tagNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-      private void ensureTagNamesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          tagNames_ = new com.google.protobuf.LazyStringArrayList(tagNames_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-      /**
-       * <code>repeated string tag_names = 2;</code>
-       * @return A list containing the tagNames.
-       */
-      public com.google.protobuf.ProtocolStringList
-          getTagNamesList() {
-        return tagNames_.getUnmodifiableView();
-      }
-      /**
-       * <code>repeated string tag_names = 2;</code>
-       * @return The count of tagNames.
-       */
-      public int getTagNamesCount() {
-        return tagNames_.size();
-      }
-      /**
-       * <code>repeated string tag_names = 2;</code>
-       * @param index The index of the element to return.
-       * @return The tagNames at the given index.
-       */
-      public java.lang.String getTagNames(int index) {
-        return tagNames_.get(index);
-      }
-      /**
-       * <code>repeated string tag_names = 2;</code>
-       * @param index The index of the value to return.
-       * @return The bytes of the tagNames at the given index.
-       */
-      public com.google.protobuf.ByteString
-          getTagNamesBytes(int index) {
-        return tagNames_.getByteString(index);
-      }
-      /**
-       * <code>repeated string tag_names = 2;</code>
-       * @param index The index to set the value at.
-       * @param value The tagNames to set.
-       * @return This builder for chaining.
-       */
-      public Builder setTagNames(
-          int index, java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureTagNamesIsMutable();
-        tagNames_.set(index, value);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated string tag_names = 2;</code>
-       * @param value The tagNames to add.
-       * @return This builder for chaining.
-       */
-      public Builder addTagNames(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureTagNamesIsMutable();
-        tagNames_.add(value);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated string tag_names = 2;</code>
-       * @param values The tagNames to add.
-       * @return This builder for chaining.
-       */
-      public Builder addAllTagNames(
-          java.lang.Iterable<java.lang.String> values) {
-        ensureTagNamesIsMutable();
-        com.google.protobuf.AbstractMessageLite.Builder.addAll(
-            values, tagNames_);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated string tag_names = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearTagNames() {
-        tagNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated string tag_names = 2;</code>
-       * @param value The bytes of the tagNames to add.
-       * @return This builder for chaining.
-       */
-      public Builder addTagNamesBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        ensureTagNamesIsMutable();
-        tagNames_.add(value);
-        onChanged();
-        return this;
-      }
-
-      private com.google.protobuf.LazyStringList fieldNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-      private void ensureFieldNamesIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          fieldNames_ = new com.google.protobuf.LazyStringArrayList(fieldNames_);
-          bitField0_ |= 0x00000002;
-         }
-      }
-      /**
-       * <code>repeated string field_names = 3;</code>
-       * @return A list containing the fieldNames.
-       */
-      public com.google.protobuf.ProtocolStringList
-          getFieldNamesList() {
-        return fieldNames_.getUnmodifiableView();
-      }
-      /**
-       * <code>repeated string field_names = 3;</code>
-       * @return The count of fieldNames.
-       */
-      public int getFieldNamesCount() {
-        return fieldNames_.size();
-      }
-      /**
-       * <code>repeated string field_names = 3;</code>
-       * @param index The index of the element to return.
-       * @return The fieldNames at the given index.
-       */
-      public java.lang.String getFieldNames(int index) {
-        return fieldNames_.get(index);
-      }
-      /**
-       * <code>repeated string field_names = 3;</code>
-       * @param index The index of the value to return.
-       * @return The bytes of the fieldNames at the given index.
-       */
-      public com.google.protobuf.ByteString
-          getFieldNamesBytes(int index) {
-        return fieldNames_.getByteString(index);
-      }
-      /**
-       * <code>repeated string field_names = 3;</code>
-       * @param index The index to set the value at.
-       * @param value The fieldNames to set.
-       * @return This builder for chaining.
-       */
-      public Builder setFieldNames(
-          int index, java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureFieldNamesIsMutable();
-        fieldNames_.set(index, value);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated string field_names = 3;</code>
-       * @param value The fieldNames to add.
-       * @return This builder for chaining.
-       */
-      public Builder addFieldNames(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureFieldNamesIsMutable();
-        fieldNames_.add(value);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated string field_names = 3;</code>
-       * @param values The fieldNames to add.
-       * @return This builder for chaining.
-       */
-      public Builder addAllFieldNames(
-          java.lang.Iterable<java.lang.String> values) {
-        ensureFieldNamesIsMutable();
-        com.google.protobuf.AbstractMessageLite.Builder.addAll(
-            values, fieldNames_);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated string field_names = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearFieldNames() {
-        fieldNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated string field_names = 3;</code>
-       * @param value The bytes of the fieldNames to add.
-       * @return This builder for chaining.
-       */
-      public Builder addFieldNamesBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        ensureFieldNamesIsMutable();
-        fieldNames_.add(value);
-        onChanged();
-        return this;
-      }
-
-      private java.util.List<io.ceresdb.proto.Storage.WriteEntry> entries_ =
-        java.util.Collections.emptyList();
-      private void ensureEntriesIsMutable() {
-        if (!((bitField0_ & 0x00000004) != 0)) {
-          entries_ = new java.util.ArrayList<io.ceresdb.proto.Storage.WriteEntry>(entries_);
-          bitField0_ |= 0x00000004;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          io.ceresdb.proto.Storage.WriteEntry, io.ceresdb.proto.Storage.WriteEntry.Builder, io.ceresdb.proto.Storage.WriteEntryOrBuilder> entriesBuilder_;
-
-      /**
-       * <code>repeated .storage.WriteEntry entries = 4;</code>
-       */
-      public java.util.List<io.ceresdb.proto.Storage.WriteEntry> getEntriesList() {
-        if (entriesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(entries_);
-        } else {
-          return entriesBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .storage.WriteEntry entries = 4;</code>
-       */
-      public int getEntriesCount() {
-        if (entriesBuilder_ == null) {
-          return entries_.size();
-        } else {
-          return entriesBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .storage.WriteEntry entries = 4;</code>
-       */
-      public io.ceresdb.proto.Storage.WriteEntry getEntries(int index) {
-        if (entriesBuilder_ == null) {
-          return entries_.get(index);
-        } else {
-          return entriesBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .storage.WriteEntry entries = 4;</code>
-       */
-      public Builder setEntries(
-          int index, io.ceresdb.proto.Storage.WriteEntry value) {
-        if (entriesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureEntriesIsMutable();
-          entries_.set(index, value);
-          onChanged();
-        } else {
-          entriesBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.WriteEntry entries = 4;</code>
-       */
-      public Builder setEntries(
-          int index, io.ceresdb.proto.Storage.WriteEntry.Builder builderForValue) {
-        if (entriesBuilder_ == null) {
-          ensureEntriesIsMutable();
-          entries_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          entriesBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.WriteEntry entries = 4;</code>
-       */
-      public Builder addEntries(io.ceresdb.proto.Storage.WriteEntry value) {
-        if (entriesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureEntriesIsMutable();
-          entries_.add(value);
-          onChanged();
-        } else {
-          entriesBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.WriteEntry entries = 4;</code>
-       */
-      public Builder addEntries(
-          int index, io.ceresdb.proto.Storage.WriteEntry value) {
-        if (entriesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureEntriesIsMutable();
-          entries_.add(index, value);
-          onChanged();
-        } else {
-          entriesBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.WriteEntry entries = 4;</code>
-       */
-      public Builder addEntries(
-          io.ceresdb.proto.Storage.WriteEntry.Builder builderForValue) {
-        if (entriesBuilder_ == null) {
-          ensureEntriesIsMutable();
-          entries_.add(builderForValue.build());
-          onChanged();
-        } else {
-          entriesBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.WriteEntry entries = 4;</code>
-       */
-      public Builder addEntries(
-          int index, io.ceresdb.proto.Storage.WriteEntry.Builder builderForValue) {
-        if (entriesBuilder_ == null) {
-          ensureEntriesIsMutable();
-          entries_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          entriesBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.WriteEntry entries = 4;</code>
-       */
-      public Builder addAllEntries(
-          java.lang.Iterable<? extends io.ceresdb.proto.Storage.WriteEntry> values) {
-        if (entriesBuilder_ == null) {
-          ensureEntriesIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, entries_);
-          onChanged();
-        } else {
-          entriesBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.WriteEntry entries = 4;</code>
-       */
-      public Builder clearEntries() {
-        if (entriesBuilder_ == null) {
-          entries_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
-          onChanged();
-        } else {
-          entriesBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.WriteEntry entries = 4;</code>
-       */
-      public Builder removeEntries(int index) {
-        if (entriesBuilder_ == null) {
-          ensureEntriesIsMutable();
-          entries_.remove(index);
-          onChanged();
-        } else {
-          entriesBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.WriteEntry entries = 4;</code>
-       */
-      public io.ceresdb.proto.Storage.WriteEntry.Builder getEntriesBuilder(
-          int index) {
-        return getEntriesFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .storage.WriteEntry entries = 4;</code>
-       */
-      public io.ceresdb.proto.Storage.WriteEntryOrBuilder getEntriesOrBuilder(
-          int index) {
-        if (entriesBuilder_ == null) {
-          return entries_.get(index);  } else {
-          return entriesBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .storage.WriteEntry entries = 4;</code>
-       */
-      public java.util.List<? extends io.ceresdb.proto.Storage.WriteEntryOrBuilder> 
-           getEntriesOrBuilderList() {
-        if (entriesBuilder_ != null) {
-          return entriesBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(entries_);
-        }
-      }
-      /**
-       * <code>repeated .storage.WriteEntry entries = 4;</code>
-       */
-      public io.ceresdb.proto.Storage.WriteEntry.Builder addEntriesBuilder() {
-        return getEntriesFieldBuilder().addBuilder(
-            io.ceresdb.proto.Storage.WriteEntry.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .storage.WriteEntry entries = 4;</code>
-       */
-      public io.ceresdb.proto.Storage.WriteEntry.Builder addEntriesBuilder(
-          int index) {
-        return getEntriesFieldBuilder().addBuilder(
-            index, io.ceresdb.proto.Storage.WriteEntry.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .storage.WriteEntry entries = 4;</code>
-       */
-      public java.util.List<io.ceresdb.proto.Storage.WriteEntry.Builder> 
-           getEntriesBuilderList() {
-        return getEntriesFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          io.ceresdb.proto.Storage.WriteEntry, io.ceresdb.proto.Storage.WriteEntry.Builder, io.ceresdb.proto.Storage.WriteEntryOrBuilder> 
-          getEntriesFieldBuilder() {
-        if (entriesBuilder_ == null) {
-          entriesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              io.ceresdb.proto.Storage.WriteEntry, io.ceresdb.proto.Storage.WriteEntry.Builder, io.ceresdb.proto.Storage.WriteEntryOrBuilder>(
-                  entries_,
-                  ((bitField0_ & 0x00000004) != 0),
-                  getParentForChildren(),
-                  isClean());
-          entries_ = null;
-        }
-        return entriesBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:storage.WriteMetric)
-    }
-
-    // @@protoc_insertion_point(class_scope:storage.WriteMetric)
-    private static final io.ceresdb.proto.Storage.WriteMetric DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new io.ceresdb.proto.Storage.WriteMetric();
-    }
-
-    public static io.ceresdb.proto.Storage.WriteMetric getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<WriteMetric>
-        PARSER = new com.google.protobuf.AbstractParser<WriteMetric>() {
-      @java.lang.Override
-      public WriteMetric parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new WriteMetric(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<WriteMetric> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<WriteMetric> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.WriteMetric getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface WriteRequestOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:storage.WriteRequest)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>repeated .storage.WriteMetric metrics = 1;</code>
-     */
-    java.util.List<io.ceresdb.proto.Storage.WriteMetric> 
-        getMetricsList();
-    /**
-     * <code>repeated .storage.WriteMetric metrics = 1;</code>
-     */
-    io.ceresdb.proto.Storage.WriteMetric getMetrics(int index);
-    /**
-     * <code>repeated .storage.WriteMetric metrics = 1;</code>
-     */
-    int getMetricsCount();
-    /**
-     * <code>repeated .storage.WriteMetric metrics = 1;</code>
-     */
-    java.util.List<? extends io.ceresdb.proto.Storage.WriteMetricOrBuilder> 
-        getMetricsOrBuilderList();
-    /**
-     * <code>repeated .storage.WriteMetric metrics = 1;</code>
-     */
-    io.ceresdb.proto.Storage.WriteMetricOrBuilder getMetricsOrBuilder(
-        int index);
-  }
-  /**
-   * Protobuf type {@code storage.WriteRequest}
-   */
-  public static final class WriteRequest extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:storage.WriteRequest)
-      WriteRequestOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use WriteRequest.newBuilder() to construct.
-    private WriteRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private WriteRequest() {
-      metrics_ = java.util.Collections.emptyList();
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new WriteRequest();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private WriteRequest(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      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;
-            case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                metrics_ = new java.util.ArrayList<io.ceresdb.proto.Storage.WriteMetric>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              metrics_.add(
-                  input.readMessage(io.ceresdb.proto.Storage.WriteMetric.parser(), extensionRegistry));
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (com.google.protobuf.UninitializedMessageException e) {
-        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          metrics_ = java.util.Collections.unmodifiableList(metrics_);
-        }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.ceresdb.proto.Storage.internal_static_storage_WriteRequest_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.ceresdb.proto.Storage.internal_static_storage_WriteRequest_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.ceresdb.proto.Storage.WriteRequest.class, io.ceresdb.proto.Storage.WriteRequest.Builder.class);
-    }
-
-    public static final int METRICS_FIELD_NUMBER = 1;
-    private java.util.List<io.ceresdb.proto.Storage.WriteMetric> metrics_;
-    /**
-     * <code>repeated .storage.WriteMetric metrics = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<io.ceresdb.proto.Storage.WriteMetric> getMetricsList() {
-      return metrics_;
-    }
-    /**
-     * <code>repeated .storage.WriteMetric metrics = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends io.ceresdb.proto.Storage.WriteMetricOrBuilder> 
-        getMetricsOrBuilderList() {
-      return metrics_;
-    }
-    /**
-     * <code>repeated .storage.WriteMetric metrics = 1;</code>
-     */
-    @java.lang.Override
-    public int getMetricsCount() {
-      return metrics_.size();
-    }
-    /**
-     * <code>repeated .storage.WriteMetric metrics = 1;</code>
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.WriteMetric getMetrics(int index) {
-      return metrics_.get(index);
-    }
-    /**
-     * <code>repeated .storage.WriteMetric metrics = 1;</code>
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.WriteMetricOrBuilder getMetricsOrBuilder(
-        int index) {
-      return metrics_.get(index);
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      for (int i = 0; i < metrics_.size(); i++) {
-        output.writeMessage(1, metrics_.get(i));
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      for (int i = 0; i < metrics_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, metrics_.get(i));
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof io.ceresdb.proto.Storage.WriteRequest)) {
-        return super.equals(obj);
-      }
-      io.ceresdb.proto.Storage.WriteRequest other = (io.ceresdb.proto.Storage.WriteRequest) obj;
-
-      if (!getMetricsList()
-          .equals(other.getMetricsList())) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (getMetricsCount() > 0) {
-        hash = (37 * hash) + METRICS_FIELD_NUMBER;
-        hash = (53 * hash) + getMetricsList().hashCode();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static io.ceresdb.proto.Storage.WriteRequest parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.WriteRequest parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteRequest parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.WriteRequest parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteRequest parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.WriteRequest parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteRequest parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.WriteRequest parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteRequest parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.WriteRequest parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteRequest parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.WriteRequest parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(io.ceresdb.proto.Storage.WriteRequest prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code storage.WriteRequest}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:storage.WriteRequest)
-        io.ceresdb.proto.Storage.WriteRequestOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.ceresdb.proto.Storage.internal_static_storage_WriteRequest_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.ceresdb.proto.Storage.internal_static_storage_WriteRequest_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.ceresdb.proto.Storage.WriteRequest.class, io.ceresdb.proto.Storage.WriteRequest.Builder.class);
-      }
-
-      // Construct using io.ceresdb.proto.Storage.WriteRequest.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-          getMetricsFieldBuilder();
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (metricsBuilder_ == null) {
-          metrics_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          metricsBuilder_.clear();
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.ceresdb.proto.Storage.internal_static_storage_WriteRequest_descriptor;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.WriteRequest getDefaultInstanceForType() {
-        return io.ceresdb.proto.Storage.WriteRequest.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.WriteRequest build() {
-        io.ceresdb.proto.Storage.WriteRequest result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.WriteRequest buildPartial() {
-        io.ceresdb.proto.Storage.WriteRequest result = new io.ceresdb.proto.Storage.WriteRequest(this);
-        int from_bitField0_ = bitField0_;
-        if (metricsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            metrics_ = java.util.Collections.unmodifiableList(metrics_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.metrics_ = metrics_;
-        } else {
-          result.metrics_ = metricsBuilder_.build();
-        }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.ceresdb.proto.Storage.WriteRequest) {
-          return mergeFrom((io.ceresdb.proto.Storage.WriteRequest)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.ceresdb.proto.Storage.WriteRequest other) {
-        if (other == io.ceresdb.proto.Storage.WriteRequest.getDefaultInstance()) return this;
-        if (metricsBuilder_ == null) {
-          if (!other.metrics_.isEmpty()) {
-            if (metrics_.isEmpty()) {
-              metrics_ = other.metrics_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureMetricsIsMutable();
-              metrics_.addAll(other.metrics_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.metrics_.isEmpty()) {
-            if (metricsBuilder_.isEmpty()) {
-              metricsBuilder_.dispose();
-              metricsBuilder_ = null;
-              metrics_ = other.metrics_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              metricsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getMetricsFieldBuilder() : null;
-            } else {
-              metricsBuilder_.addAllMessages(other.metrics_);
-            }
-          }
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.ceresdb.proto.Storage.WriteRequest parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.ceresdb.proto.Storage.WriteRequest) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private java.util.List<io.ceresdb.proto.Storage.WriteMetric> metrics_ =
-        java.util.Collections.emptyList();
-      private void ensureMetricsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          metrics_ = new java.util.ArrayList<io.ceresdb.proto.Storage.WriteMetric>(metrics_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          io.ceresdb.proto.Storage.WriteMetric, io.ceresdb.proto.Storage.WriteMetric.Builder, io.ceresdb.proto.Storage.WriteMetricOrBuilder> metricsBuilder_;
-
-      /**
-       * <code>repeated .storage.WriteMetric metrics = 1;</code>
-       */
-      public java.util.List<io.ceresdb.proto.Storage.WriteMetric> getMetricsList() {
-        if (metricsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(metrics_);
-        } else {
-          return metricsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .storage.WriteMetric metrics = 1;</code>
-       */
-      public int getMetricsCount() {
-        if (metricsBuilder_ == null) {
-          return metrics_.size();
-        } else {
-          return metricsBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .storage.WriteMetric metrics = 1;</code>
-       */
-      public io.ceresdb.proto.Storage.WriteMetric getMetrics(int index) {
-        if (metricsBuilder_ == null) {
-          return metrics_.get(index);
-        } else {
-          return metricsBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .storage.WriteMetric metrics = 1;</code>
-       */
-      public Builder setMetrics(
-          int index, io.ceresdb.proto.Storage.WriteMetric value) {
-        if (metricsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureMetricsIsMutable();
-          metrics_.set(index, value);
-          onChanged();
-        } else {
-          metricsBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.WriteMetric metrics = 1;</code>
-       */
-      public Builder setMetrics(
-          int index, io.ceresdb.proto.Storage.WriteMetric.Builder builderForValue) {
-        if (metricsBuilder_ == null) {
-          ensureMetricsIsMutable();
-          metrics_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          metricsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.WriteMetric metrics = 1;</code>
-       */
-      public Builder addMetrics(io.ceresdb.proto.Storage.WriteMetric value) {
-        if (metricsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureMetricsIsMutable();
-          metrics_.add(value);
-          onChanged();
-        } else {
-          metricsBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.WriteMetric metrics = 1;</code>
-       */
-      public Builder addMetrics(
-          int index, io.ceresdb.proto.Storage.WriteMetric value) {
-        if (metricsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureMetricsIsMutable();
-          metrics_.add(index, value);
-          onChanged();
-        } else {
-          metricsBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.WriteMetric metrics = 1;</code>
-       */
-      public Builder addMetrics(
-          io.ceresdb.proto.Storage.WriteMetric.Builder builderForValue) {
-        if (metricsBuilder_ == null) {
-          ensureMetricsIsMutable();
-          metrics_.add(builderForValue.build());
-          onChanged();
-        } else {
-          metricsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.WriteMetric metrics = 1;</code>
-       */
-      public Builder addMetrics(
-          int index, io.ceresdb.proto.Storage.WriteMetric.Builder builderForValue) {
-        if (metricsBuilder_ == null) {
-          ensureMetricsIsMutable();
-          metrics_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          metricsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.WriteMetric metrics = 1;</code>
-       */
-      public Builder addAllMetrics(
-          java.lang.Iterable<? extends io.ceresdb.proto.Storage.WriteMetric> values) {
-        if (metricsBuilder_ == null) {
-          ensureMetricsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, metrics_);
-          onChanged();
-        } else {
-          metricsBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.WriteMetric metrics = 1;</code>
-       */
-      public Builder clearMetrics() {
-        if (metricsBuilder_ == null) {
-          metrics_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          metricsBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.WriteMetric metrics = 1;</code>
-       */
-      public Builder removeMetrics(int index) {
-        if (metricsBuilder_ == null) {
-          ensureMetricsIsMutable();
-          metrics_.remove(index);
-          onChanged();
-        } else {
-          metricsBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .storage.WriteMetric metrics = 1;</code>
-       */
-      public io.ceresdb.proto.Storage.WriteMetric.Builder getMetricsBuilder(
-          int index) {
-        return getMetricsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .storage.WriteMetric metrics = 1;</code>
-       */
-      public io.ceresdb.proto.Storage.WriteMetricOrBuilder getMetricsOrBuilder(
-          int index) {
-        if (metricsBuilder_ == null) {
-          return metrics_.get(index);  } else {
-          return metricsBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .storage.WriteMetric metrics = 1;</code>
-       */
-      public java.util.List<? extends io.ceresdb.proto.Storage.WriteMetricOrBuilder> 
-           getMetricsOrBuilderList() {
-        if (metricsBuilder_ != null) {
-          return metricsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(metrics_);
-        }
-      }
-      /**
-       * <code>repeated .storage.WriteMetric metrics = 1;</code>
-       */
-      public io.ceresdb.proto.Storage.WriteMetric.Builder addMetricsBuilder() {
-        return getMetricsFieldBuilder().addBuilder(
-            io.ceresdb.proto.Storage.WriteMetric.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .storage.WriteMetric metrics = 1;</code>
-       */
-      public io.ceresdb.proto.Storage.WriteMetric.Builder addMetricsBuilder(
-          int index) {
-        return getMetricsFieldBuilder().addBuilder(
-            index, io.ceresdb.proto.Storage.WriteMetric.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .storage.WriteMetric metrics = 1;</code>
-       */
-      public java.util.List<io.ceresdb.proto.Storage.WriteMetric.Builder> 
-           getMetricsBuilderList() {
-        return getMetricsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          io.ceresdb.proto.Storage.WriteMetric, io.ceresdb.proto.Storage.WriteMetric.Builder, io.ceresdb.proto.Storage.WriteMetricOrBuilder> 
-          getMetricsFieldBuilder() {
-        if (metricsBuilder_ == null) {
-          metricsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              io.ceresdb.proto.Storage.WriteMetric, io.ceresdb.proto.Storage.WriteMetric.Builder, io.ceresdb.proto.Storage.WriteMetricOrBuilder>(
-                  metrics_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          metrics_ = null;
-        }
-        return metricsBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:storage.WriteRequest)
-    }
-
-    // @@protoc_insertion_point(class_scope:storage.WriteRequest)
-    private static final io.ceresdb.proto.Storage.WriteRequest DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new io.ceresdb.proto.Storage.WriteRequest();
-    }
-
-    public static io.ceresdb.proto.Storage.WriteRequest getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<WriteRequest>
-        PARSER = new com.google.protobuf.AbstractParser<WriteRequest>() {
-      @java.lang.Override
-      public WriteRequest parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new WriteRequest(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<WriteRequest> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<WriteRequest> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.WriteRequest getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface WriteResponseOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:storage.WriteResponse)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.storage.ResponseHeader header = 1;</code>
-     * @return Whether the header field is set.
-     */
-    boolean hasHeader();
-    /**
-     * <code>.storage.ResponseHeader header = 1;</code>
-     * @return The header.
-     */
-    io.ceresdb.proto.Common.ResponseHeader getHeader();
-    /**
-     * <code>.storage.ResponseHeader header = 1;</code>
-     */
-    io.ceresdb.proto.Common.ResponseHeaderOrBuilder getHeaderOrBuilder();
-
-    /**
-     * <code>uint32 success = 2;</code>
-     * @return The success.
-     */
-    int getSuccess();
-
-    /**
-     * <code>uint32 failed = 3;</code>
-     * @return The failed.
-     */
-    int getFailed();
-  }
-  /**
-   * Protobuf type {@code storage.WriteResponse}
-   */
-  public static final class WriteResponse extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:storage.WriteResponse)
-      WriteResponseOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use WriteResponse.newBuilder() to construct.
-    private WriteResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private WriteResponse() {
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new WriteResponse();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private WriteResponse(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      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;
-            case 10: {
-              io.ceresdb.proto.Common.ResponseHeader.Builder subBuilder = null;
-              if (header_ != null) {
-                subBuilder = header_.toBuilder();
-              }
-              header_ = input.readMessage(io.ceresdb.proto.Common.ResponseHeader.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(header_);
-                header_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 16: {
-
-              success_ = input.readUInt32();
-              break;
-            }
-            case 24: {
-
-              failed_ = input.readUInt32();
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (com.google.protobuf.UninitializedMessageException e) {
-        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.ceresdb.proto.Storage.internal_static_storage_WriteResponse_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.ceresdb.proto.Storage.internal_static_storage_WriteResponse_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.ceresdb.proto.Storage.WriteResponse.class, io.ceresdb.proto.Storage.WriteResponse.Builder.class);
-    }
-
-    public static final int HEADER_FIELD_NUMBER = 1;
-    private io.ceresdb.proto.Common.ResponseHeader header_;
-    /**
-     * <code>.storage.ResponseHeader header = 1;</code>
-     * @return Whether the header field is set.
-     */
-    @java.lang.Override
-    public boolean hasHeader() {
-      return header_ != null;
-    }
-    /**
-     * <code>.storage.ResponseHeader header = 1;</code>
-     * @return The header.
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Common.ResponseHeader getHeader() {
-      return header_ == null ? io.ceresdb.proto.Common.ResponseHeader.getDefaultInstance() : header_;
-    }
-    /**
-     * <code>.storage.ResponseHeader header = 1;</code>
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Common.ResponseHeaderOrBuilder getHeaderOrBuilder() {
-      return getHeader();
-    }
-
-    public static final int SUCCESS_FIELD_NUMBER = 2;
-    private int success_;
-    /**
-     * <code>uint32 success = 2;</code>
-     * @return The success.
-     */
-    @java.lang.Override
-    public int getSuccess() {
-      return success_;
-    }
-
-    public static final int FAILED_FIELD_NUMBER = 3;
-    private int failed_;
-    /**
-     * <code>uint32 failed = 3;</code>
-     * @return The failed.
-     */
-    @java.lang.Override
-    public int getFailed() {
-      return failed_;
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (header_ != null) {
-        output.writeMessage(1, getHeader());
-      }
-      if (success_ != 0) {
-        output.writeUInt32(2, success_);
-      }
-      if (failed_ != 0) {
-        output.writeUInt32(3, failed_);
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (header_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getHeader());
-      }
-      if (success_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(2, success_);
-      }
-      if (failed_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(3, failed_);
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof io.ceresdb.proto.Storage.WriteResponse)) {
-        return super.equals(obj);
-      }
-      io.ceresdb.proto.Storage.WriteResponse other = (io.ceresdb.proto.Storage.WriteResponse) obj;
-
-      if (hasHeader() != other.hasHeader()) return false;
-      if (hasHeader()) {
-        if (!getHeader()
-            .equals(other.getHeader())) return false;
-      }
-      if (getSuccess()
-          != other.getSuccess()) return false;
-      if (getFailed()
-          != other.getFailed()) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasHeader()) {
-        hash = (37 * hash) + HEADER_FIELD_NUMBER;
-        hash = (53 * hash) + getHeader().hashCode();
-      }
-      hash = (37 * hash) + SUCCESS_FIELD_NUMBER;
-      hash = (53 * hash) + getSuccess();
-      hash = (37 * hash) + FAILED_FIELD_NUMBER;
-      hash = (53 * hash) + getFailed();
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static io.ceresdb.proto.Storage.WriteResponse parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.WriteResponse parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteResponse parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.WriteResponse parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteResponse parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.WriteResponse parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteResponse parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.WriteResponse parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteResponse parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.WriteResponse parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.WriteResponse parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.WriteResponse parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(io.ceresdb.proto.Storage.WriteResponse prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code storage.WriteResponse}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:storage.WriteResponse)
-        io.ceresdb.proto.Storage.WriteResponseOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.ceresdb.proto.Storage.internal_static_storage_WriteResponse_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.ceresdb.proto.Storage.internal_static_storage_WriteResponse_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.ceresdb.proto.Storage.WriteResponse.class, io.ceresdb.proto.Storage.WriteResponse.Builder.class);
-      }
-
-      // Construct using io.ceresdb.proto.Storage.WriteResponse.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (headerBuilder_ == null) {
-          header_ = null;
-        } else {
-          header_ = null;
-          headerBuilder_ = null;
-        }
-        success_ = 0;
-
-        failed_ = 0;
-
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.ceresdb.proto.Storage.internal_static_storage_WriteResponse_descriptor;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.WriteResponse getDefaultInstanceForType() {
-        return io.ceresdb.proto.Storage.WriteResponse.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.WriteResponse build() {
-        io.ceresdb.proto.Storage.WriteResponse result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.WriteResponse buildPartial() {
-        io.ceresdb.proto.Storage.WriteResponse result = new io.ceresdb.proto.Storage.WriteResponse(this);
-        if (headerBuilder_ == null) {
-          result.header_ = header_;
-        } else {
-          result.header_ = headerBuilder_.build();
-        }
-        result.success_ = success_;
-        result.failed_ = failed_;
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.ceresdb.proto.Storage.WriteResponse) {
-          return mergeFrom((io.ceresdb.proto.Storage.WriteResponse)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.ceresdb.proto.Storage.WriteResponse other) {
-        if (other == io.ceresdb.proto.Storage.WriteResponse.getDefaultInstance()) return this;
-        if (other.hasHeader()) {
-          mergeHeader(other.getHeader());
-        }
-        if (other.getSuccess() != 0) {
-          setSuccess(other.getSuccess());
-        }
-        if (other.getFailed() != 0) {
-          setFailed(other.getFailed());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.ceresdb.proto.Storage.WriteResponse parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.ceresdb.proto.Storage.WriteResponse) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private io.ceresdb.proto.Common.ResponseHeader header_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          io.ceresdb.proto.Common.ResponseHeader, io.ceresdb.proto.Common.ResponseHeader.Builder, io.ceresdb.proto.Common.ResponseHeaderOrBuilder> headerBuilder_;
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       * @return Whether the header field is set.
-       */
-      public boolean hasHeader() {
-        return headerBuilder_ != null || header_ != null;
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       * @return The header.
-       */
-      public io.ceresdb.proto.Common.ResponseHeader getHeader() {
-        if (headerBuilder_ == null) {
-          return header_ == null ? io.ceresdb.proto.Common.ResponseHeader.getDefaultInstance() : header_;
-        } else {
-          return headerBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      public Builder setHeader(io.ceresdb.proto.Common.ResponseHeader value) {
-        if (headerBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          header_ = value;
-          onChanged();
-        } else {
-          headerBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      public Builder setHeader(
-          io.ceresdb.proto.Common.ResponseHeader.Builder builderForValue) {
-        if (headerBuilder_ == null) {
-          header_ = builderForValue.build();
-          onChanged();
-        } else {
-          headerBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      public Builder mergeHeader(io.ceresdb.proto.Common.ResponseHeader value) {
-        if (headerBuilder_ == null) {
-          if (header_ != null) {
-            header_ =
-              io.ceresdb.proto.Common.ResponseHeader.newBuilder(header_).mergeFrom(value).buildPartial();
-          } else {
-            header_ = value;
-          }
-          onChanged();
-        } else {
-          headerBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      public Builder clearHeader() {
-        if (headerBuilder_ == null) {
-          header_ = null;
-          onChanged();
-        } else {
-          header_ = null;
-          headerBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      public io.ceresdb.proto.Common.ResponseHeader.Builder getHeaderBuilder() {
-        
-        onChanged();
-        return getHeaderFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      public io.ceresdb.proto.Common.ResponseHeaderOrBuilder getHeaderOrBuilder() {
-        if (headerBuilder_ != null) {
-          return headerBuilder_.getMessageOrBuilder();
-        } else {
-          return header_ == null ?
-              io.ceresdb.proto.Common.ResponseHeader.getDefaultInstance() : header_;
-        }
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          io.ceresdb.proto.Common.ResponseHeader, io.ceresdb.proto.Common.ResponseHeader.Builder, io.ceresdb.proto.Common.ResponseHeaderOrBuilder> 
-          getHeaderFieldBuilder() {
-        if (headerBuilder_ == null) {
-          headerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              io.ceresdb.proto.Common.ResponseHeader, io.ceresdb.proto.Common.ResponseHeader.Builder, io.ceresdb.proto.Common.ResponseHeaderOrBuilder>(
-                  getHeader(),
-                  getParentForChildren(),
-                  isClean());
-          header_ = null;
-        }
-        return headerBuilder_;
-      }
-
-      private int success_ ;
-      /**
-       * <code>uint32 success = 2;</code>
-       * @return The success.
-       */
-      @java.lang.Override
-      public int getSuccess() {
-        return success_;
-      }
-      /**
-       * <code>uint32 success = 2;</code>
-       * @param value The success to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSuccess(int value) {
-        
-        success_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 success = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearSuccess() {
-        
-        success_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private int failed_ ;
-      /**
-       * <code>uint32 failed = 3;</code>
-       * @return The failed.
-       */
-      @java.lang.Override
-      public int getFailed() {
-        return failed_;
-      }
-      /**
-       * <code>uint32 failed = 3;</code>
-       * @param value The failed to set.
-       * @return This builder for chaining.
-       */
-      public Builder setFailed(int value) {
-        
-        failed_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 failed = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearFailed() {
-        
-        failed_ = 0;
-        onChanged();
-        return this;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:storage.WriteResponse)
-    }
-
-    // @@protoc_insertion_point(class_scope:storage.WriteResponse)
-    private static final io.ceresdb.proto.Storage.WriteResponse DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new io.ceresdb.proto.Storage.WriteResponse();
-    }
-
-    public static io.ceresdb.proto.Storage.WriteResponse getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<WriteResponse>
-        PARSER = new com.google.protobuf.AbstractParser<WriteResponse>() {
-      @java.lang.Override
-      public WriteResponse parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new WriteResponse(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<WriteResponse> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<WriteResponse> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.WriteResponse getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface QueryRequestOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:storage.QueryRequest)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>repeated string metrics = 1;</code>
-     * @return A list containing the metrics.
-     */
-    java.util.List<java.lang.String>
-        getMetricsList();
-    /**
-     * <code>repeated string metrics = 1;</code>
-     * @return The count of metrics.
-     */
-    int getMetricsCount();
-    /**
-     * <code>repeated string metrics = 1;</code>
-     * @param index The index of the element to return.
-     * @return The metrics at the given index.
-     */
-    java.lang.String getMetrics(int index);
-    /**
-     * <code>repeated string metrics = 1;</code>
-     * @param index The index of the value to return.
-     * @return The bytes of the metrics at the given index.
-     */
-    com.google.protobuf.ByteString
-        getMetricsBytes(int index);
-
-    /**
-     * <code>string ql = 2;</code>
-     * @return The ql.
-     */
-    java.lang.String getQl();
-    /**
-     * <code>string ql = 2;</code>
-     * @return The bytes for ql.
-     */
-    com.google.protobuf.ByteString
-        getQlBytes();
-  }
-  /**
-   * Protobuf type {@code storage.QueryRequest}
-   */
-  public static final class QueryRequest extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:storage.QueryRequest)
-      QueryRequestOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use QueryRequest.newBuilder() to construct.
-    private QueryRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private QueryRequest() {
-      metrics_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-      ql_ = "";
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new QueryRequest();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private QueryRequest(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      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;
-            case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                metrics_ = new com.google.protobuf.LazyStringArrayList();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              metrics_.add(s);
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              ql_ = s;
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (com.google.protobuf.UninitializedMessageException e) {
-        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          metrics_ = metrics_.getUnmodifiableView();
-        }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.ceresdb.proto.Storage.internal_static_storage_QueryRequest_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.ceresdb.proto.Storage.internal_static_storage_QueryRequest_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.ceresdb.proto.Storage.QueryRequest.class, io.ceresdb.proto.Storage.QueryRequest.Builder.class);
-    }
-
-    public static final int METRICS_FIELD_NUMBER = 1;
-    private com.google.protobuf.LazyStringList metrics_;
-    /**
-     * <code>repeated string metrics = 1;</code>
-     * @return A list containing the metrics.
-     */
-    public com.google.protobuf.ProtocolStringList
-        getMetricsList() {
-      return metrics_;
-    }
-    /**
-     * <code>repeated string metrics = 1;</code>
-     * @return The count of metrics.
-     */
-    public int getMetricsCount() {
-      return metrics_.size();
-    }
-    /**
-     * <code>repeated string metrics = 1;</code>
-     * @param index The index of the element to return.
-     * @return The metrics at the given index.
-     */
-    public java.lang.String getMetrics(int index) {
-      return metrics_.get(index);
-    }
-    /**
-     * <code>repeated string metrics = 1;</code>
-     * @param index The index of the value to return.
-     * @return The bytes of the metrics at the given index.
-     */
-    public com.google.protobuf.ByteString
-        getMetricsBytes(int index) {
-      return metrics_.getByteString(index);
-    }
-
-    public static final int QL_FIELD_NUMBER = 2;
-    private volatile java.lang.Object ql_;
-    /**
-     * <code>string ql = 2;</code>
-     * @return The ql.
-     */
-    @java.lang.Override
-    public java.lang.String getQl() {
-      java.lang.Object ref = ql_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        ql_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string ql = 2;</code>
-     * @return The bytes for ql.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getQlBytes() {
-      java.lang.Object ref = ql_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        ql_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      for (int i = 0; i < metrics_.size(); i++) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, metrics_.getRaw(i));
-      }
-      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(ql_)) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, ql_);
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      {
-        int dataSize = 0;
-        for (int i = 0; i < metrics_.size(); i++) {
-          dataSize += computeStringSizeNoTag(metrics_.getRaw(i));
-        }
-        size += dataSize;
-        size += 1 * getMetricsList().size();
-      }
-      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(ql_)) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, ql_);
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof io.ceresdb.proto.Storage.QueryRequest)) {
-        return super.equals(obj);
-      }
-      io.ceresdb.proto.Storage.QueryRequest other = (io.ceresdb.proto.Storage.QueryRequest) obj;
-
-      if (!getMetricsList()
-          .equals(other.getMetricsList())) return false;
-      if (!getQl()
-          .equals(other.getQl())) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (getMetricsCount() > 0) {
-        hash = (37 * hash) + METRICS_FIELD_NUMBER;
-        hash = (53 * hash) + getMetricsList().hashCode();
-      }
-      hash = (37 * hash) + QL_FIELD_NUMBER;
-      hash = (53 * hash) + getQl().hashCode();
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static io.ceresdb.proto.Storage.QueryRequest parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.QueryRequest parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.QueryRequest parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.QueryRequest parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.QueryRequest parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.QueryRequest parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.QueryRequest parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.QueryRequest parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.QueryRequest parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.QueryRequest parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.QueryRequest parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.QueryRequest parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(io.ceresdb.proto.Storage.QueryRequest prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code storage.QueryRequest}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:storage.QueryRequest)
-        io.ceresdb.proto.Storage.QueryRequestOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.ceresdb.proto.Storage.internal_static_storage_QueryRequest_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.ceresdb.proto.Storage.internal_static_storage_QueryRequest_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.ceresdb.proto.Storage.QueryRequest.class, io.ceresdb.proto.Storage.QueryRequest.Builder.class);
-      }
-
-      // Construct using io.ceresdb.proto.Storage.QueryRequest.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        metrics_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        ql_ = "";
-
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.ceresdb.proto.Storage.internal_static_storage_QueryRequest_descriptor;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.QueryRequest getDefaultInstanceForType() {
-        return io.ceresdb.proto.Storage.QueryRequest.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.QueryRequest build() {
-        io.ceresdb.proto.Storage.QueryRequest result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.QueryRequest buildPartial() {
-        io.ceresdb.proto.Storage.QueryRequest result = new io.ceresdb.proto.Storage.QueryRequest(this);
-        int from_bitField0_ = bitField0_;
-        if (((bitField0_ & 0x00000001) != 0)) {
-          metrics_ = metrics_.getUnmodifiableView();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        }
-        result.metrics_ = metrics_;
-        result.ql_ = ql_;
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.ceresdb.proto.Storage.QueryRequest) {
-          return mergeFrom((io.ceresdb.proto.Storage.QueryRequest)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.ceresdb.proto.Storage.QueryRequest other) {
-        if (other == io.ceresdb.proto.Storage.QueryRequest.getDefaultInstance()) return this;
-        if (!other.metrics_.isEmpty()) {
-          if (metrics_.isEmpty()) {
-            metrics_ = other.metrics_;
-            bitField0_ = (bitField0_ & ~0x00000001);
-          } else {
-            ensureMetricsIsMutable();
-            metrics_.addAll(other.metrics_);
-          }
-          onChanged();
-        }
-        if (!other.getQl().isEmpty()) {
-          ql_ = other.ql_;
-          onChanged();
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.ceresdb.proto.Storage.QueryRequest parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.ceresdb.proto.Storage.QueryRequest) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private com.google.protobuf.LazyStringList metrics_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-      private void ensureMetricsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          metrics_ = new com.google.protobuf.LazyStringArrayList(metrics_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-      /**
-       * <code>repeated string metrics = 1;</code>
-       * @return A list containing the metrics.
-       */
-      public com.google.protobuf.ProtocolStringList
-          getMetricsList() {
-        return metrics_.getUnmodifiableView();
-      }
-      /**
-       * <code>repeated string metrics = 1;</code>
-       * @return The count of metrics.
-       */
-      public int getMetricsCount() {
-        return metrics_.size();
-      }
-      /**
-       * <code>repeated string metrics = 1;</code>
-       * @param index The index of the element to return.
-       * @return The metrics at the given index.
-       */
-      public java.lang.String getMetrics(int index) {
-        return metrics_.get(index);
-      }
-      /**
-       * <code>repeated string metrics = 1;</code>
-       * @param index The index of the value to return.
-       * @return The bytes of the metrics at the given index.
-       */
-      public com.google.protobuf.ByteString
-          getMetricsBytes(int index) {
-        return metrics_.getByteString(index);
-      }
-      /**
-       * <code>repeated string metrics = 1;</code>
-       * @param index The index to set the value at.
-       * @param value The metrics to set.
-       * @return This builder for chaining.
-       */
-      public Builder setMetrics(
-          int index, java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureMetricsIsMutable();
-        metrics_.set(index, value);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated string metrics = 1;</code>
-       * @param value The metrics to add.
-       * @return This builder for chaining.
-       */
-      public Builder addMetrics(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureMetricsIsMutable();
-        metrics_.add(value);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated string metrics = 1;</code>
-       * @param values The metrics to add.
-       * @return This builder for chaining.
-       */
-      public Builder addAllMetrics(
-          java.lang.Iterable<java.lang.String> values) {
-        ensureMetricsIsMutable();
-        com.google.protobuf.AbstractMessageLite.Builder.addAll(
-            values, metrics_);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated string metrics = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearMetrics() {
-        metrics_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated string metrics = 1;</code>
-       * @param value The bytes of the metrics to add.
-       * @return This builder for chaining.
-       */
-      public Builder addMetricsBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        ensureMetricsIsMutable();
-        metrics_.add(value);
-        onChanged();
-        return this;
-      }
-
-      private java.lang.Object ql_ = "";
-      /**
-       * <code>string ql = 2;</code>
-       * @return The ql.
-       */
-      public java.lang.String getQl() {
-        java.lang.Object ref = ql_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          ql_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string ql = 2;</code>
-       * @return The bytes for ql.
-       */
-      public com.google.protobuf.ByteString
-          getQlBytes() {
-        java.lang.Object ref = ql_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          ql_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string ql = 2;</code>
-       * @param value The ql to set.
-       * @return This builder for chaining.
-       */
-      public Builder setQl(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        ql_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string ql = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearQl() {
-        
-        ql_ = getDefaultInstance().getQl();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string ql = 2;</code>
-       * @param value The bytes for ql to set.
-       * @return This builder for chaining.
-       */
-      public Builder setQlBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        ql_ = value;
-        onChanged();
-        return this;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:storage.QueryRequest)
-    }
-
-    // @@protoc_insertion_point(class_scope:storage.QueryRequest)
-    private static final io.ceresdb.proto.Storage.QueryRequest DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new io.ceresdb.proto.Storage.QueryRequest();
-    }
-
-    public static io.ceresdb.proto.Storage.QueryRequest getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<QueryRequest>
-        PARSER = new com.google.protobuf.AbstractParser<QueryRequest>() {
-      @java.lang.Override
-      public QueryRequest parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new QueryRequest(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<QueryRequest> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<QueryRequest> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.QueryRequest getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface QueryResponseOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:storage.QueryResponse)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.storage.ResponseHeader header = 1;</code>
-     * @return Whether the header field is set.
-     */
-    boolean hasHeader();
-    /**
-     * <code>.storage.ResponseHeader header = 1;</code>
-     * @return The header.
-     */
-    io.ceresdb.proto.Common.ResponseHeader getHeader();
-    /**
-     * <code>.storage.ResponseHeader header = 1;</code>
-     */
-    io.ceresdb.proto.Common.ResponseHeaderOrBuilder getHeaderOrBuilder();
-
-    /**
-     * <code>.storage.QueryResponse.SchemaType schema_type = 2;</code>
-     * @return The enum numeric value on the wire for schemaType.
-     */
-    int getSchemaTypeValue();
-    /**
-     * <code>.storage.QueryResponse.SchemaType schema_type = 2;</code>
-     * @return The schemaType.
-     */
-    io.ceresdb.proto.Storage.QueryResponse.SchemaType getSchemaType();
-
-    /**
-     * <code>string schema_content = 3;</code>
-     * @return The schemaContent.
-     */
-    java.lang.String getSchemaContent();
-    /**
-     * <code>string schema_content = 3;</code>
-     * @return The bytes for schemaContent.
-     */
-    com.google.protobuf.ByteString
-        getSchemaContentBytes();
-
-    /**
-     * <code>repeated bytes rows = 4;</code>
-     * @return A list containing the rows.
-     */
-    java.util.List<com.google.protobuf.ByteString> getRowsList();
-    /**
-     * <code>repeated bytes rows = 4;</code>
-     * @return The count of rows.
-     */
-    int getRowsCount();
-    /**
-     * <code>repeated bytes rows = 4;</code>
-     * @param index The index of the element to return.
-     * @return The rows at the given index.
-     */
-    com.google.protobuf.ByteString getRows(int index);
-  }
-  /**
-   * Protobuf type {@code storage.QueryResponse}
-   */
-  public static final class QueryResponse extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:storage.QueryResponse)
-      QueryResponseOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use QueryResponse.newBuilder() to construct.
-    private QueryResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private QueryResponse() {
-      schemaType_ = 0;
-      schemaContent_ = "";
-      rows_ = java.util.Collections.emptyList();
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new QueryResponse();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private QueryResponse(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      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;
-            case 10: {
-              io.ceresdb.proto.Common.ResponseHeader.Builder subBuilder = null;
-              if (header_ != null) {
-                subBuilder = header_.toBuilder();
-              }
-              header_ = input.readMessage(io.ceresdb.proto.Common.ResponseHeader.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(header_);
-                header_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 16: {
-              int rawValue = input.readEnum();
-
-              schemaType_ = rawValue;
-              break;
-            }
-            case 26: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              schemaContent_ = s;
-              break;
-            }
-            case 34: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                rows_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              rows_.add(input.readBytes());
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (com.google.protobuf.UninitializedMessageException e) {
-        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          rows_ = java.util.Collections.unmodifiableList(rows_); // C
-        }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.ceresdb.proto.Storage.internal_static_storage_QueryResponse_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.ceresdb.proto.Storage.internal_static_storage_QueryResponse_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.ceresdb.proto.Storage.QueryResponse.class, io.ceresdb.proto.Storage.QueryResponse.Builder.class);
-    }
-
-    /**
-     * Protobuf enum {@code storage.QueryResponse.SchemaType}
-     */
-    public enum SchemaType
-        implements com.google.protobuf.ProtocolMessageEnum {
-      /**
-       * <code>AVRO = 0;</code>
-       */
-      AVRO(0),
-      /**
-       * <code>JSON = 1;</code>
-       */
-      JSON(1),
-      UNRECOGNIZED(-1),
-      ;
-
-      /**
-       * <code>AVRO = 0;</code>
-       */
-      public static final int AVRO_VALUE = 0;
-      /**
-       * <code>JSON = 1;</code>
-       */
-      public static final int JSON_VALUE = 1;
-
-
-      public final int getNumber() {
-        if (this == UNRECOGNIZED) {
-          throw new java.lang.IllegalArgumentException(
-              "Can't get the number of an unknown enum value.");
-        }
-        return value;
-      }
-
-      /**
-       * @param value The numeric wire value of the corresponding enum entry.
-       * @return The enum associated with the given numeric wire value.
-       * @deprecated Use {@link #forNumber(int)} instead.
-       */
-      @java.lang.Deprecated
-      public static SchemaType valueOf(int value) {
-        return forNumber(value);
-      }
-
-      /**
-       * @param value The numeric wire value of the corresponding enum entry.
-       * @return The enum associated with the given numeric wire value.
-       */
-      public static SchemaType forNumber(int value) {
-        switch (value) {
-          case 0: return AVRO;
-          case 1: return JSON;
-          default: return null;
-        }
-      }
-
-      public static com.google.protobuf.Internal.EnumLiteMap<SchemaType>
-          internalGetValueMap() {
-        return internalValueMap;
-      }
-      private static final com.google.protobuf.Internal.EnumLiteMap<
-          SchemaType> internalValueMap =
-            new com.google.protobuf.Internal.EnumLiteMap<SchemaType>() {
-              public SchemaType findValueByNumber(int number) {
-                return SchemaType.forNumber(number);
-              }
-            };
-
-      public final com.google.protobuf.Descriptors.EnumValueDescriptor
-          getValueDescriptor() {
-        if (this == UNRECOGNIZED) {
-          throw new java.lang.IllegalStateException(
-              "Can't get the descriptor of an unrecognized enum value.");
-        }
-        return getDescriptor().getValues().get(ordinal());
-      }
-      public final com.google.protobuf.Descriptors.EnumDescriptor
-          getDescriptorForType() {
-        return getDescriptor();
-      }
-      public static final com.google.protobuf.Descriptors.EnumDescriptor
-          getDescriptor() {
-        return io.ceresdb.proto.Storage.QueryResponse.getDescriptor().getEnumTypes().get(0);
-      }
-
-      private static final SchemaType[] VALUES = values();
-
-      public static SchemaType valueOf(
-          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
-        if (desc.getType() != getDescriptor()) {
-          throw new java.lang.IllegalArgumentException(
-            "EnumValueDescriptor is not for this type.");
-        }
-        if (desc.getIndex() == -1) {
-          return UNRECOGNIZED;
-        }
-        return VALUES[desc.getIndex()];
-      }
-
-      private final int value;
-
-      private SchemaType(int value) {
-        this.value = value;
-      }
-
-      // @@protoc_insertion_point(enum_scope:storage.QueryResponse.SchemaType)
-    }
-
-    public static final int HEADER_FIELD_NUMBER = 1;
-    private io.ceresdb.proto.Common.ResponseHeader header_;
-    /**
-     * <code>.storage.ResponseHeader header = 1;</code>
-     * @return Whether the header field is set.
-     */
-    @java.lang.Override
-    public boolean hasHeader() {
-      return header_ != null;
-    }
-    /**
-     * <code>.storage.ResponseHeader header = 1;</code>
-     * @return The header.
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Common.ResponseHeader getHeader() {
-      return header_ == null ? io.ceresdb.proto.Common.ResponseHeader.getDefaultInstance() : header_;
-    }
-    /**
-     * <code>.storage.ResponseHeader header = 1;</code>
-     */
-    @java.lang.Override
-    public io.ceresdb.proto.Common.ResponseHeaderOrBuilder getHeaderOrBuilder() {
-      return getHeader();
-    }
-
-    public static final int SCHEMA_TYPE_FIELD_NUMBER = 2;
-    private int schemaType_;
-    /**
-     * <code>.storage.QueryResponse.SchemaType schema_type = 2;</code>
-     * @return The enum numeric value on the wire for schemaType.
-     */
-    @java.lang.Override public int getSchemaTypeValue() {
-      return schemaType_;
-    }
-    /**
-     * <code>.storage.QueryResponse.SchemaType schema_type = 2;</code>
-     * @return The schemaType.
-     */
-    @java.lang.Override public io.ceresdb.proto.Storage.QueryResponse.SchemaType getSchemaType() {
-      @SuppressWarnings("deprecation")
-      io.ceresdb.proto.Storage.QueryResponse.SchemaType result = io.ceresdb.proto.Storage.QueryResponse.SchemaType.valueOf(schemaType_);
-      return result == null ? io.ceresdb.proto.Storage.QueryResponse.SchemaType.UNRECOGNIZED : result;
-    }
-
-    public static final int SCHEMA_CONTENT_FIELD_NUMBER = 3;
-    private volatile java.lang.Object schemaContent_;
-    /**
-     * <code>string schema_content = 3;</code>
-     * @return The schemaContent.
-     */
-    @java.lang.Override
-    public java.lang.String getSchemaContent() {
-      java.lang.Object ref = schemaContent_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        schemaContent_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string schema_content = 3;</code>
-     * @return The bytes for schemaContent.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getSchemaContentBytes() {
-      java.lang.Object ref = schemaContent_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        schemaContent_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-
-    public static final int ROWS_FIELD_NUMBER = 4;
-    private java.util.List<com.google.protobuf.ByteString> rows_;
-    /**
-     * <code>repeated bytes rows = 4;</code>
-     * @return A list containing the rows.
-     */
-    @java.lang.Override
-    public java.util.List<com.google.protobuf.ByteString>
-        getRowsList() {
-      return rows_;
-    }
-    /**
-     * <code>repeated bytes rows = 4;</code>
-     * @return The count of rows.
-     */
-    public int getRowsCount() {
-      return rows_.size();
-    }
-    /**
-     * <code>repeated bytes rows = 4;</code>
-     * @param index The index of the element to return.
-     * @return The rows at the given index.
-     */
-    public com.google.protobuf.ByteString getRows(int index) {
-      return rows_.get(index);
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (header_ != null) {
-        output.writeMessage(1, getHeader());
-      }
-      if (schemaType_ != io.ceresdb.proto.Storage.QueryResponse.SchemaType.AVRO.getNumber()) {
-        output.writeEnum(2, schemaType_);
-      }
-      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(schemaContent_)) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, schemaContent_);
-      }
-      for (int i = 0; i < rows_.size(); i++) {
-        output.writeBytes(4, rows_.get(i));
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (header_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getHeader());
-      }
-      if (schemaType_ != io.ceresdb.proto.Storage.QueryResponse.SchemaType.AVRO.getNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(2, schemaType_);
-      }
-      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(schemaContent_)) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, schemaContent_);
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < rows_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeBytesSizeNoTag(rows_.get(i));
-        }
-        size += dataSize;
-        size += 1 * getRowsList().size();
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof io.ceresdb.proto.Storage.QueryResponse)) {
-        return super.equals(obj);
-      }
-      io.ceresdb.proto.Storage.QueryResponse other = (io.ceresdb.proto.Storage.QueryResponse) obj;
-
-      if (hasHeader() != other.hasHeader()) return false;
-      if (hasHeader()) {
-        if (!getHeader()
-            .equals(other.getHeader())) return false;
-      }
-      if (schemaType_ != other.schemaType_) return false;
-      if (!getSchemaContent()
-          .equals(other.getSchemaContent())) return false;
-      if (!getRowsList()
-          .equals(other.getRowsList())) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasHeader()) {
-        hash = (37 * hash) + HEADER_FIELD_NUMBER;
-        hash = (53 * hash) + getHeader().hashCode();
-      }
-      hash = (37 * hash) + SCHEMA_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + schemaType_;
-      hash = (37 * hash) + SCHEMA_CONTENT_FIELD_NUMBER;
-      hash = (53 * hash) + getSchemaContent().hashCode();
-      if (getRowsCount() > 0) {
-        hash = (37 * hash) + ROWS_FIELD_NUMBER;
-        hash = (53 * hash) + getRowsList().hashCode();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static io.ceresdb.proto.Storage.QueryResponse parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.QueryResponse parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.QueryResponse parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.QueryResponse parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.QueryResponse parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.ceresdb.proto.Storage.QueryResponse parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.QueryResponse parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.QueryResponse parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.QueryResponse parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.QueryResponse parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static io.ceresdb.proto.Storage.QueryResponse parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static io.ceresdb.proto.Storage.QueryResponse parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(io.ceresdb.proto.Storage.QueryResponse prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code storage.QueryResponse}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:storage.QueryResponse)
-        io.ceresdb.proto.Storage.QueryResponseOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.ceresdb.proto.Storage.internal_static_storage_QueryResponse_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.ceresdb.proto.Storage.internal_static_storage_QueryResponse_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.ceresdb.proto.Storage.QueryResponse.class, io.ceresdb.proto.Storage.QueryResponse.Builder.class);
-      }
-
-      // Construct using io.ceresdb.proto.Storage.QueryResponse.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (headerBuilder_ == null) {
-          header_ = null;
-        } else {
-          header_ = null;
-          headerBuilder_ = null;
-        }
-        schemaType_ = 0;
-
-        schemaContent_ = "";
-
-        rows_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.ceresdb.proto.Storage.internal_static_storage_QueryResponse_descriptor;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.QueryResponse getDefaultInstanceForType() {
-        return io.ceresdb.proto.Storage.QueryResponse.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.QueryResponse build() {
-        io.ceresdb.proto.Storage.QueryResponse result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.QueryResponse buildPartial() {
-        io.ceresdb.proto.Storage.QueryResponse result = new io.ceresdb.proto.Storage.QueryResponse(this);
-        int from_bitField0_ = bitField0_;
-        if (headerBuilder_ == null) {
-          result.header_ = header_;
-        } else {
-          result.header_ = headerBuilder_.build();
-        }
-        result.schemaType_ = schemaType_;
-        result.schemaContent_ = schemaContent_;
-        if (((bitField0_ & 0x00000001) != 0)) {
-          rows_ = java.util.Collections.unmodifiableList(rows_);
-          bitField0_ = (bitField0_ & ~0x00000001);
-        }
-        result.rows_ = rows_;
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.ceresdb.proto.Storage.QueryResponse) {
-          return mergeFrom((io.ceresdb.proto.Storage.QueryResponse)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.ceresdb.proto.Storage.QueryResponse other) {
-        if (other == io.ceresdb.proto.Storage.QueryResponse.getDefaultInstance()) return this;
-        if (other.hasHeader()) {
-          mergeHeader(other.getHeader());
-        }
-        if (other.schemaType_ != 0) {
-          setSchemaTypeValue(other.getSchemaTypeValue());
-        }
-        if (!other.getSchemaContent().isEmpty()) {
-          schemaContent_ = other.schemaContent_;
-          onChanged();
-        }
-        if (!other.rows_.isEmpty()) {
-          if (rows_.isEmpty()) {
-            rows_ = other.rows_;
-            bitField0_ = (bitField0_ & ~0x00000001);
-          } else {
-            ensureRowsIsMutable();
-            rows_.addAll(other.rows_);
-          }
-          onChanged();
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.ceresdb.proto.Storage.QueryResponse parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.ceresdb.proto.Storage.QueryResponse) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private io.ceresdb.proto.Common.ResponseHeader header_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          io.ceresdb.proto.Common.ResponseHeader, io.ceresdb.proto.Common.ResponseHeader.Builder, io.ceresdb.proto.Common.ResponseHeaderOrBuilder> headerBuilder_;
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       * @return Whether the header field is set.
-       */
-      public boolean hasHeader() {
-        return headerBuilder_ != null || header_ != null;
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       * @return The header.
-       */
-      public io.ceresdb.proto.Common.ResponseHeader getHeader() {
-        if (headerBuilder_ == null) {
-          return header_ == null ? io.ceresdb.proto.Common.ResponseHeader.getDefaultInstance() : header_;
-        } else {
-          return headerBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      public Builder setHeader(io.ceresdb.proto.Common.ResponseHeader value) {
-        if (headerBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          header_ = value;
-          onChanged();
-        } else {
-          headerBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      public Builder setHeader(
-          io.ceresdb.proto.Common.ResponseHeader.Builder builderForValue) {
-        if (headerBuilder_ == null) {
-          header_ = builderForValue.build();
-          onChanged();
-        } else {
-          headerBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      public Builder mergeHeader(io.ceresdb.proto.Common.ResponseHeader value) {
-        if (headerBuilder_ == null) {
-          if (header_ != null) {
-            header_ =
-              io.ceresdb.proto.Common.ResponseHeader.newBuilder(header_).mergeFrom(value).buildPartial();
-          } else {
-            header_ = value;
-          }
-          onChanged();
-        } else {
-          headerBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      public Builder clearHeader() {
-        if (headerBuilder_ == null) {
-          header_ = null;
-          onChanged();
-        } else {
-          header_ = null;
-          headerBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      public io.ceresdb.proto.Common.ResponseHeader.Builder getHeaderBuilder() {
-        
-        onChanged();
-        return getHeaderFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      public io.ceresdb.proto.Common.ResponseHeaderOrBuilder getHeaderOrBuilder() {
-        if (headerBuilder_ != null) {
-          return headerBuilder_.getMessageOrBuilder();
-        } else {
-          return header_ == null ?
-              io.ceresdb.proto.Common.ResponseHeader.getDefaultInstance() : header_;
-        }
-      }
-      /**
-       * <code>.storage.ResponseHeader header = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          io.ceresdb.proto.Common.ResponseHeader, io.ceresdb.proto.Common.ResponseHeader.Builder, io.ceresdb.proto.Common.ResponseHeaderOrBuilder> 
-          getHeaderFieldBuilder() {
-        if (headerBuilder_ == null) {
-          headerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              io.ceresdb.proto.Common.ResponseHeader, io.ceresdb.proto.Common.ResponseHeader.Builder, io.ceresdb.proto.Common.ResponseHeaderOrBuilder>(
-                  getHeader(),
-                  getParentForChildren(),
-                  isClean());
-          header_ = null;
-        }
-        return headerBuilder_;
-      }
-
-      private int schemaType_ = 0;
-      /**
-       * <code>.storage.QueryResponse.SchemaType schema_type = 2;</code>
-       * @return The enum numeric value on the wire for schemaType.
-       */
-      @java.lang.Override public int getSchemaTypeValue() {
-        return schemaType_;
-      }
-      /**
-       * <code>.storage.QueryResponse.SchemaType schema_type = 2;</code>
-       * @param value The enum numeric value on the wire for schemaType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSchemaTypeValue(int value) {
-        
-        schemaType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.storage.QueryResponse.SchemaType schema_type = 2;</code>
-       * @return The schemaType.
-       */
-      @java.lang.Override
-      public io.ceresdb.proto.Storage.QueryResponse.SchemaType getSchemaType() {
-        @SuppressWarnings("deprecation")
-        io.ceresdb.proto.Storage.QueryResponse.SchemaType result = io.ceresdb.proto.Storage.QueryResponse.SchemaType.valueOf(schemaType_);
-        return result == null ? io.ceresdb.proto.Storage.QueryResponse.SchemaType.UNRECOGNIZED : result;
-      }
-      /**
-       * <code>.storage.QueryResponse.SchemaType schema_type = 2;</code>
-       * @param value The schemaType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSchemaType(io.ceresdb.proto.Storage.QueryResponse.SchemaType value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        
-        schemaType_ = value.getNumber();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.storage.QueryResponse.SchemaType schema_type = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearSchemaType() {
-        
-        schemaType_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private java.lang.Object schemaContent_ = "";
-      /**
-       * <code>string schema_content = 3;</code>
-       * @return The schemaContent.
-       */
-      public java.lang.String getSchemaContent() {
-        java.lang.Object ref = schemaContent_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          schemaContent_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string schema_content = 3;</code>
-       * @return The bytes for schemaContent.
-       */
-      public com.google.protobuf.ByteString
-          getSchemaContentBytes() {
-        java.lang.Object ref = schemaContent_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          schemaContent_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string schema_content = 3;</code>
-       * @param value The schemaContent to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSchemaContent(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        schemaContent_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string schema_content = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearSchemaContent() {
-        
-        schemaContent_ = getDefaultInstance().getSchemaContent();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string schema_content = 3;</code>
-       * @param value The bytes for schemaContent to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSchemaContentBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        schemaContent_ = value;
-        onChanged();
-        return this;
-      }
-
-      private java.util.List<com.google.protobuf.ByteString> rows_ = java.util.Collections.emptyList();
-      private void ensureRowsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          rows_ = new java.util.ArrayList<com.google.protobuf.ByteString>(rows_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-      /**
-       * <code>repeated bytes rows = 4;</code>
-       * @return A list containing the rows.
-       */
-      public java.util.List<com.google.protobuf.ByteString>
-          getRowsList() {
-        return ((bitField0_ & 0x00000001) != 0) ?
-                 java.util.Collections.unmodifiableList(rows_) : rows_;
-      }
-      /**
-       * <code>repeated bytes rows = 4;</code>
-       * @return The count of rows.
-       */
-      public int getRowsCount() {
-        return rows_.size();
-      }
-      /**
-       * <code>repeated bytes rows = 4;</code>
-       * @param index The index of the element to return.
-       * @return The rows at the given index.
-       */
-      public com.google.protobuf.ByteString getRows(int index) {
-        return rows_.get(index);
-      }
-      /**
-       * <code>repeated bytes rows = 4;</code>
-       * @param index The index to set the value at.
-       * @param value The rows to set.
-       * @return This builder for chaining.
-       */
-      public Builder setRows(
-          int index, com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureRowsIsMutable();
-        rows_.set(index, value);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated bytes rows = 4;</code>
-       * @param value The rows to add.
-       * @return This builder for chaining.
-       */
-      public Builder addRows(com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureRowsIsMutable();
-        rows_.add(value);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated bytes rows = 4;</code>
-       * @param values The rows to add.
-       * @return This builder for chaining.
-       */
-      public Builder addAllRows(
-          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
-        ensureRowsIsMutable();
-        com.google.protobuf.AbstractMessageLite.Builder.addAll(
-            values, rows_);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated bytes rows = 4;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearRows() {
-        rows_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
-        onChanged();
-        return this;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:storage.QueryResponse)
-    }
-
-    // @@protoc_insertion_point(class_scope:storage.QueryResponse)
-    private static final io.ceresdb.proto.Storage.QueryResponse DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new io.ceresdb.proto.Storage.QueryResponse();
-    }
-
-    public static io.ceresdb.proto.Storage.QueryResponse getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<QueryResponse>
-        PARSER = new com.google.protobuf.AbstractParser<QueryResponse>() {
-      @java.lang.Override
-      public QueryResponse parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new QueryResponse(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<QueryResponse> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<QueryResponse> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public io.ceresdb.proto.Storage.QueryResponse getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_storage_RouteRequest_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_storage_RouteRequest_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_storage_Endpoint_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_storage_Endpoint_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_storage_Route_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_storage_Route_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_storage_RouteResponse_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_storage_RouteResponse_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_storage_Value_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_storage_Value_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_storage_Field_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_storage_Field_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_storage_FieldGroup_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_storage_FieldGroup_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_storage_Tag_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_storage_Tag_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_storage_WriteEntry_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_storage_WriteEntry_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_storage_WriteMetric_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_storage_WriteMetric_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_storage_WriteRequest_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_storage_WriteRequest_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_storage_WriteResponse_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_storage_WriteResponse_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_storage_QueryRequest_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_storage_QueryRequest_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_storage_QueryResponse_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_storage_QueryResponse_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\rstorage.proto\022\007storage\032\014common.proto\"\037" +
-      "\n\014RouteRequest\022\017\n\007metrics\030\001 \003(\t\"$\n\010Endpo" +
-      "int\022\n\n\002ip\030\001 \001(\t\022\014\n\004port\030\002 \001(\r\"I\n\005Route\022\016" +
-      "\n\006metric\030\001 \001(\t\022#\n\010endpoint\030\002 \001(\0132\021.stora" +
-      "ge.Endpoint\022\013\n\003ext\030\003 \001(\014\"X\n\rRouteRespons" +
-      "e\022\'\n\006header\030\001 \001(\0132\027.storage.ResponseHead" +
-      "er\022\036\n\006routes\030\002 \003(\0132\016.storage.Route\"\340\002\n\005V" +
-      "alue\022\027\n\rfloat64_value\030\001 \001(\001H\000\022\026\n\014string_" +
-      "value\030\002 \001(\tH\000\022\025\n\013int64_value\030\003 \001(\003H\000\022\027\n\r" +
-      "float32_value\030\004 \001(\002H\000\022\025\n\013int32_value\030\005 \001" +
-      "(\005H\000\022\025\n\013int16_value\030\006 \001(\005H\000\022\024\n\nint8_valu" +
-      "e\030\007 \001(\005H\000\022\024\n\nbool_value\030\010 \001(\010H\000\022\026\n\014uint6" +
-      "4_value\030\t \001(\004H\000\022\026\n\014uint32_value\030\n \001(\rH\000\022" +
-      "\026\n\014uint16_value\030\013 \001(\rH\000\022\025\n\013uint8_value\030\014" +
-      " \001(\rH\000\022\031\n\017timestamp_value\030\r \001(\003H\000\022\031\n\017var" +
-      "binary_value\030\016 \001(\014H\000B\007\n\005value\":\n\005Field\022\022" +
-      "\n\nname_index\030\001 \001(\r\022\035\n\005value\030\002 \001(\0132\016.stor" +
-      "age.Value\"?\n\nFieldGroup\022\021\n\ttimestamp\030\001 \001" +
-      "(\003\022\036\n\006fields\030\002 \003(\0132\016.storage.Field\"8\n\003Ta" +
-      "g\022\022\n\nname_index\030\001 \001(\r\022\035\n\005value\030\002 \001(\0132\016.s" +
-      "torage.Value\"S\n\nWriteEntry\022\032\n\004tags\030\001 \003(\013" +
-      "2\014.storage.Tag\022)\n\014field_groups\030\002 \003(\0132\023.s" +
-      "torage.FieldGroup\"k\n\013WriteMetric\022\016\n\006metr" +
-      "ic\030\001 \001(\t\022\021\n\ttag_names\030\002 \003(\t\022\023\n\013field_nam" +
-      "es\030\003 \003(\t\022$\n\007entries\030\004 \003(\0132\023.storage.Writ" +
-      "eEntry\"5\n\014WriteRequest\022%\n\007metrics\030\001 \003(\0132" +
-      "\024.storage.WriteMetric\"Y\n\rWriteResponse\022\'" +
-      "\n\006header\030\001 \001(\0132\027.storage.ResponseHeader\022" +
-      "\017\n\007success\030\002 \001(\r\022\016\n\006failed\030\003 \001(\r\"+\n\014Quer" +
-      "yRequest\022\017\n\007metrics\030\001 \003(\t\022\n\n\002ql\030\002 \001(\t\"\270\001" +
-      "\n\rQueryResponse\022\'\n\006header\030\001 \001(\0132\027.storag" +
-      "e.ResponseHeader\0226\n\013schema_type\030\002 \001(\0162!." +
-      "storage.QueryResponse.SchemaType\022\026\n\016sche" +
-      "ma_content\030\003 \001(\t\022\014\n\004rows\030\004 \003(\014\" \n\nSchema" +
-      "Type\022\010\n\004AVRO\020\000\022\010\n\004JSON\020\0012\302\002\n\016StorageServ" +
-      "ice\0228\n\005Route\022\025.storage.RouteRequest\032\026.st" +
-      "orage.RouteResponse\"\000\0228\n\005Write\022\025.storage" +
-      ".WriteRequest\032\026.storage.WriteResponse\"\000\022" +
-      "@\n\013StreamWrite\022\025.storage.WriteRequest\032\026." +
-      "storage.WriteResponse\"\000(\001\0228\n\005Query\022\025.sto" +
-      "rage.QueryRequest\032\026.storage.QueryRespons" +
-      "e\"\000\022@\n\013StreamQuery\022\025.storage.QueryReques" +
-      "t\032\026.storage.QueryResponse\"\0000\001B\033\n\020io.cere" +
-      "sdb.protoB\007Storageb\006proto3"
-    };
-    descriptor = com.google.protobuf.Descriptors.FileDescriptor
-      .internalBuildGeneratedFileFrom(descriptorData,
-        new com.google.protobuf.Descriptors.FileDescriptor[] {
-          io.ceresdb.proto.Common.getDescriptor(),
-        });
-    internal_static_storage_RouteRequest_descriptor =
-      getDescriptor().getMessageTypes().get(0);
-    internal_static_storage_RouteRequest_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_storage_RouteRequest_descriptor,
-        new java.lang.String[] { "Metrics", });
-    internal_static_storage_Endpoint_descriptor =
-      getDescriptor().getMessageTypes().get(1);
-    internal_static_storage_Endpoint_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_storage_Endpoint_descriptor,
-        new java.lang.String[] { "Ip", "Port", });
-    internal_static_storage_Route_descriptor =
-      getDescriptor().getMessageTypes().get(2);
-    internal_static_storage_Route_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_storage_Route_descriptor,
-        new java.lang.String[] { "Metric", "Endpoint", "Ext", });
-    internal_static_storage_RouteResponse_descriptor =
-      getDescriptor().getMessageTypes().get(3);
-    internal_static_storage_RouteResponse_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_storage_RouteResponse_descriptor,
-        new java.lang.String[] { "Header", "Routes", });
-    internal_static_storage_Value_descriptor =
-      getDescriptor().getMessageTypes().get(4);
-    internal_static_storage_Value_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_storage_Value_descriptor,
-        new java.lang.String[] { "Float64Value", "StringValue", "Int64Value", "Float32Value", "Int32Value", "Int16Value", "Int8Value", "BoolValue", "Uint64Value", "Uint32Value", "Uint16Value", "Uint8Value", "TimestampValue", "VarbinaryValue", "Value", });
-    internal_static_storage_Field_descriptor =
-      getDescriptor().getMessageTypes().get(5);
-    internal_static_storage_Field_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_storage_Field_descriptor,
-        new java.lang.String[] { "NameIndex", "Value", });
-    internal_static_storage_FieldGroup_descriptor =
-      getDescriptor().getMessageTypes().get(6);
-    internal_static_storage_FieldGroup_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_storage_FieldGroup_descriptor,
-        new java.lang.String[] { "Timestamp", "Fields", });
-    internal_static_storage_Tag_descriptor =
-      getDescriptor().getMessageTypes().get(7);
-    internal_static_storage_Tag_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_storage_Tag_descriptor,
-        new java.lang.String[] { "NameIndex", "Value", });
-    internal_static_storage_WriteEntry_descriptor =
-      getDescriptor().getMessageTypes().get(8);
-    internal_static_storage_WriteEntry_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_storage_WriteEntry_descriptor,
-        new java.lang.String[] { "Tags", "FieldGroups", });
-    internal_static_storage_WriteMetric_descriptor =
-      getDescriptor().getMessageTypes().get(9);
-    internal_static_storage_WriteMetric_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_storage_WriteMetric_descriptor,
-        new java.lang.String[] { "Metric", "TagNames", "FieldNames", "Entries", });
-    internal_static_storage_WriteRequest_descriptor =
-      getDescriptor().getMessageTypes().get(10);
-    internal_static_storage_WriteRequest_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_storage_WriteRequest_descriptor,
-        new java.lang.String[] { "Metrics", });
-    internal_static_storage_WriteResponse_descriptor =
-      getDescriptor().getMessageTypes().get(11);
-    internal_static_storage_WriteResponse_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_storage_WriteResponse_descriptor,
-        new java.lang.String[] { "Header", "Success", "Failed", });
-    internal_static_storage_QueryRequest_descriptor =
-      getDescriptor().getMessageTypes().get(12);
-    internal_static_storage_QueryRequest_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_storage_QueryRequest_descriptor,
-        new java.lang.String[] { "Metrics", "Ql", });
-    internal_static_storage_QueryResponse_descriptor =
-      getDescriptor().getMessageTypes().get(13);
-    internal_static_storage_QueryResponse_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_storage_QueryResponse_descriptor,
-        new java.lang.String[] { "Header", "SchemaType", "SchemaContent", "Rows", });
-    io.ceresdb.proto.Common.getDescriptor();
-  }
-
-  // @@protoc_insertion_point(outer_class_scope)
-}
diff --git a/ceresdb-protocol/src/main/resources/proto/ceresdb.desc b/ceresdb-protocol/src/main/resources/proto/ceresdb.desc
deleted file mode 100644
index d491a6a..0000000
--- a/ceresdb-protocol/src/main/resources/proto/ceresdb.desc
+++ /dev/null
Binary files differ
diff --git a/ceresdb-protocol/src/main/resources/proto/common.proto b/ceresdb-protocol/src/main/resources/proto/common.proto
deleted file mode 100644
index e20ab45..0000000
--- a/ceresdb-protocol/src/main/resources/proto/common.proto
+++ /dev/null
@@ -1,10 +0,0 @@
-syntax = "proto3";
-package storage;
-
-option java_package="io.ceresdb.proto";
-option java_outer_classname = "Common";
-
-message ResponseHeader {
-  uint32 code = 1;
-  string error = 2;
-}
diff --git a/ceresdb-protocol/src/main/resources/proto/gen.sh b/ceresdb-protocol/src/main/resources/proto/gen.sh
deleted file mode 100755
index e5346ea..0000000
--- a/ceresdb-protocol/src/main/resources/proto/gen.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/bash
-protoc -I=./  --descriptor_set_out=ceresdb.desc --java_out=../../java/ *.proto
diff --git a/ceresdb-protocol/src/main/resources/proto/storage.proto b/ceresdb-protocol/src/main/resources/proto/storage.proto
deleted file mode 100644
index b605bcb..0000000
--- a/ceresdb-protocol/src/main/resources/proto/storage.proto
+++ /dev/null
@@ -1,107 +0,0 @@
-syntax = "proto3";
-package storage;
-
-option java_package="io.ceresdb.proto";
-option java_outer_classname = "Storage";
-
-import "common.proto";
-
-service StorageService {
-  rpc Route(RouteRequest) returns (RouteResponse) {}
-  rpc Write(WriteRequest) returns (WriteResponse) {}
-  rpc StreamWrite(stream WriteRequest) returns (WriteResponse) {}
-  rpc Query(QueryRequest) returns (QueryResponse) {}
-  rpc StreamQuery(QueryRequest) returns (stream QueryResponse) {}
-}
-
-message RouteRequest {
-  repeated string metrics = 1;
-}
-
-message Endpoint {
-  string ip = 1;
-  uint32 port = 2;
-}
-
-message Route {
-  string metric = 1;
-  Endpoint endpoint = 2;
-  bytes ext = 3;
-}
-
-message RouteResponse {
-  ResponseHeader header = 1;
-  repeated Route routes = 2;
-}
-
-message Value {
-  oneof value {
-    double float64_value = 1;
-    string string_value = 2;
-    int64 int64_value = 3;
-    float float32_value = 4;
-    int32 int32_value = 5;
-    int32 int16_value = 6;
-    int32 int8_value = 7;
-    bool bool_value = 8;
-    uint64 uint64_value = 9;
-    uint32 uint32_value = 10;
-    uint32 uint16_value = 11;
-    uint32 uint8_value = 12;
-    int64 timestamp_value = 13;
-    bytes varbinary_value = 14;
-  }
-}
-
-message Field {
-  uint32 name_index = 1;
-  Value value = 2;
-}
-
-message FieldGroup {
-  int64 timestamp = 1;
-  repeated Field fields = 2;
-}
-
-message Tag {
-  uint32 name_index = 1;
-  Value value = 2;
-}
-
-message WriteEntry {
-  repeated Tag tags = 1;
-  repeated FieldGroup field_groups = 2;
-}
-
-message WriteMetric {
-  string metric = 1;
-  repeated string tag_names = 2;
-  repeated string field_names = 3;
-  repeated WriteEntry entries = 4;
-}
-
-message WriteRequest {
-  repeated WriteMetric metrics = 1;
-}
-
-message WriteResponse {
-  ResponseHeader header = 1;
-  uint32 success = 2;
-  uint32 failed = 3;
-}
-
-message QueryRequest {
-  repeated string metrics = 1;
-  string ql = 2;
-}
-
-message QueryResponse {
-  ResponseHeader header = 1;
-  enum SchemaType {
-    AVRO = 0;
-    JSON = 1;
-  }
-  SchemaType schema_type = 2;
-  string schema_content = 3;
-  repeated bytes rows = 4;
-}
diff --git a/ceresdb-protocol/src/test/java/io/ceresdb/QueryClientTest.java b/ceresdb-protocol/src/test/java/io/ceresdb/QueryClientTest.java
index eb0a540..00ecc57 100644
--- a/ceresdb-protocol/src/test/java/io/ceresdb/QueryClientTest.java
+++ b/ceresdb-protocol/src/test/java/io/ceresdb/QueryClientTest.java
@@ -29,6 +29,8 @@
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import io.ceresdb.proto.internal.Common;
+import io.ceresdb.proto.internal.Storage;
 import org.apache.avro.Schema;
 import org.apache.avro.generic.GenericData;
 import org.apache.avro.generic.GenericDatumWriter;
@@ -55,8 +57,6 @@
 import io.ceresdb.models.Record;
 import io.ceresdb.models.Result;
 import io.ceresdb.options.QueryOptions;
-import io.ceresdb.proto.Common;
-import io.ceresdb.proto.Storage;
 import io.ceresdb.rpc.Context;
 import io.ceresdb.rpc.Observer;
 
diff --git a/ceresdb-protocol/src/test/java/io/ceresdb/WriteClientTest.java b/ceresdb-protocol/src/test/java/io/ceresdb/WriteClientTest.java
index 36a4577..de0e7ac 100644
--- a/ceresdb-protocol/src/test/java/io/ceresdb/WriteClientTest.java
+++ b/ceresdb-protocol/src/test/java/io/ceresdb/WriteClientTest.java
@@ -29,6 +29,8 @@
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import io.ceresdb.proto.internal.Common;
+import io.ceresdb.proto.internal.Storage;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -47,8 +49,6 @@
 import io.ceresdb.models.Series;
 import io.ceresdb.models.WriteOk;
 import io.ceresdb.options.WriteOptions;
-import io.ceresdb.proto.Common;
-import io.ceresdb.proto.Storage;
 import io.ceresdb.rpc.Context;
 import io.ceresdb.rpc.Observer;
 import io.ceresdb.util.TestUtil;
diff --git a/ceresdb-protocol/src/test/java/io/ceresdb/util/TestUtil.java b/ceresdb-protocol/src/test/java/io/ceresdb/util/TestUtil.java
index fd495ed..4c66132 100644
--- a/ceresdb-protocol/src/test/java/io/ceresdb/util/TestUtil.java
+++ b/ceresdb-protocol/src/test/java/io/ceresdb/util/TestUtil.java
@@ -27,8 +27,8 @@
 import io.ceresdb.models.Result;
 import io.ceresdb.models.Rows;
 import io.ceresdb.models.Series;
-import io.ceresdb.proto.Common;
-import io.ceresdb.proto.Storage;
+import io.ceresdb.proto.internal.Common;
+import io.ceresdb.proto.internal.Storage;
 
 /**
  * @author jiachun.fjc
diff --git a/pom.xml b/pom.xml
index c402c3c..9795d55 100644
--- a/pom.xml
+++ b/pom.xml
@@ -74,6 +74,7 @@
         <okhttp.version>4.9.1</okhttp.version>
         <okio.version>2.8.0</okio.version>
         <project.encoding>UTF-8</project.encoding>
+        <proto-internal.version>0.1.0</proto-internal.version>
         <protobuf.version>3.21.7</protobuf.version>
         <!-- according to https://maven.apache.org/maven-ci-friendly.html -->
         <revision>0.1.0</revision>
@@ -122,6 +123,11 @@
                 <artifactId>ceresdb-example</artifactId>
                 <version>${project.version}</version>
             </dependency>
+            <dependency>
+                <groupId>${project.groupId}</groupId>
+                <artifactId>ceresdb-proto-internal</artifactId>
+                <version>${proto-internal.version}</version>
+            </dependency>
 
             <dependency>
                 <groupId>org.slf4j</groupId>