hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ssrungar...@apache.org
Subject hbase git commit: HBASE-13571 Procedure v2 - client modify table sync
Date Tue, 12 May 2015 06:08:05 GMT
Repository: hbase
Updated Branches:
  refs/heads/master 59a6e031f -> 9e131dfa8


HBASE-13571 Procedure v2 - client modify table sync


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

Branch: refs/heads/master
Commit: 9e131dfa8e1303306bb064aac489d8df43b8459b
Parents: 59a6e03
Author: Srikanth Srungarapu <ssrungarapu@cloudera.com>
Authored: Mon May 11 23:07:15 2015 -0700
Committer: Srikanth Srungarapu <ssrungarapu@cloudera.com>
Committed: Mon May 11 23:07:15 2015 -0700

----------------------------------------------------------------------
 .../org/apache/hadoop/hbase/client/Admin.java   |   8 +-
 .../apache/hadoop/hbase/client/HBaseAdmin.java  | 150 +++---
 .../hbase/protobuf/generated/MasterProtos.java  | 476 +++++++++++--------
 hbase-protocol/src/main/protobuf/Master.proto   |   1 +
 .../org/apache/hadoop/hbase/master/HMaster.java |   4 +-
 .../hadoop/hbase/master/MasterServices.java     |   2 +-
 .../hadoop/hbase/master/TestCatalogJanitor.java |   6 +-
 7 files changed, 392 insertions(+), 255 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/9e131dfa/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java
index b20568e..f00d6c9 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java
@@ -859,12 +859,18 @@ public interface Admin extends Abortable, Closeable {
   /**
    * Modify an existing table, more IRB friendly version. Asynchronous operation.  This means that
    * it may be a while before your schema change is updated across all of the table.
+   * You can use Future.get(long, TimeUnit) to wait on the operation to complete.
+   * It may throw ExecutionException if there was an error while executing the operation
+   * or TimeoutException in case the wait timeout was not long enough to allow the
+   * operation to complete.
    *
    * @param tableName name of table.
    * @param htd modified description of the table
    * @throws IOException if a remote or network exception occurs
+   * @return the result of the async modify. You can use Future.get(long, TimeUnit) to wait on the
+   *     operation to complete
    */
-  void modifyTable(final TableName tableName, final HTableDescriptor htd)
+  Future<Void> modifyTable(final TableName tableName, final HTableDescriptor htd)
       throws IOException;
 
   /**

http://git-wip-us.apache.org/repos/asf/hbase/blob/9e131dfa/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
index c0de45b..7047714 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
@@ -128,6 +128,7 @@ import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.MajorCompactionTi
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyColumnRequest;
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyNamespaceRequest;
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyTableResponse;
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.MoveRegionRequest;
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.RestoreSnapshotRequest;
 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.RestoreSnapshotResponse;
@@ -641,8 +642,8 @@ public class HBaseAdmin implements Admin {
     }
 
     @Override
-    protected String getDescription() {
-      return "Creating " + desc.getNameAsString();
+    public String getOperationType() {
+      return "CREATE";
     }
 
     @Override
@@ -719,8 +720,8 @@ public class HBaseAdmin implements Admin {
     }
 
     @Override
-    protected String getDescription() {
-      return "Deleting " + getTableName();
+    public String getOperationType() {
+      return "DELETE";
     }
 
     @Override
@@ -847,8 +848,8 @@ public class HBaseAdmin implements Admin {
     }
 
     @Override
-    public String getDescription() {
-      return "Truncating " + getTableName();
+    public String getOperationType() {
+      return "TRUNCATE";
     }
 
     @Override
@@ -1005,8 +1006,8 @@ public class HBaseAdmin implements Admin {
     }
 
     @Override
-    protected String getDescription() {
-      return "Enabling " + getTableName();
+    public String getOperationType() {
+      return "ENABLE";
     }
 
     @Override
@@ -1142,8 +1143,8 @@ public class HBaseAdmin implements Admin {
     }
 
     @Override
-    protected String getDescription() {
-      return "Disabling " + getTableName();
+    public String getOperationType() {
+      return "DISABLE";
     }
 
     @Override
@@ -2371,30 +2372,60 @@ public class HBaseAdmin implements Admin {
   }
 
   /**
-   * Modify an existing table, more IRB friendly version.
-   * Asynchronous operation.  This means that it may be a while before your
-   * schema change is updated across all of the table.
+   * Modify an existing table, more IRB friendly version. Asynchronous operation.
+   * This means that it may be a while before your schema change is updated across all of the
+   * table. You can use Future.get(long, TimeUnit) to wait on the operation to complete.
+   * It may throw ExecutionException if there was an error while executing the operation
+   * or TimeoutException in case the wait timeout was not long enough to allow the
+   * operation to complete.
    *
    * @param tableName name of table.
    * @param htd modified description of the table
    * @throws IOException if a remote or network exception occurs
+   * @return the result of the async modify. You can use Future.get(long, TimeUnit) to wait on the
+   *     operation to complete.
    */
   @Override
-  public void modifyTable(final TableName tableName, final HTableDescriptor htd)
+  public Future<Void> modifyTable(final TableName tableName, final HTableDescriptor htd)
   throws IOException {
     if (!tableName.equals(htd.getTableName())) {
       throw new IllegalArgumentException("the specified table name '" + tableName +
         "' doesn't match with the HTD one: " + htd.getTableName());
     }
 
-    executeCallable(new MasterCallable<Void>(getConnection()) {
+    ModifyTableResponse response = executeCallable(
+        new MasterCallable<ModifyTableResponse>(getConnection()) {
       @Override
-      public Void call(int callTimeout) throws ServiceException {
+      public ModifyTableResponse call(int callTimeout) throws ServiceException {
         ModifyTableRequest request = RequestConverter.buildModifyTableRequest(tableName, htd);
-        master.modifyTable(null, request);
-        return null;
+        return master.modifyTable(null, request);
       }
     });
+
+    return new ModifyTableFuture(this, tableName, response);
+  }
+
+  private static class ModifyTableFuture extends TableFuture<Void> {
+    public ModifyTableFuture(final HBaseAdmin admin, final TableName tableName,
+        final ModifyTableResponse response) {
+      super(admin, tableName,
+          (response != null && response.hasProcId()) ? response.getProcId() : null);
+    }
+
+    @Override
+    public String getOperationType() {
+      return "MODIFY";
+    }
+
+    @Override
+    protected Void postOperationResult(final Void result, final long deadlineTs)
+        throws IOException, TimeoutException {
+      // The modify operation on the table is asynchronous on the server side irrespective
+      // of whether Procedure V2 is supported or not. So, we wait in the client till
+      // all regions get updated.
+      waitForSchemaUpdate(deadlineTs);
+      return result;
+    }
   }
 
   public void modifyTable(final byte[] tableName, final HTableDescriptor htd)
@@ -4262,9 +4293,32 @@ public class HBaseAdmin implements Admin {
     }
 
     /**
+     * @return the operation type like CREATE, DELETE, DISABLE etc.
+     */
+    public abstract String getOperationType();
+
+    /**
      * @return a description of the operation
      */
-    protected abstract String getDescription();
+    protected String getDescription() {
+      return "Operation: " + getOperationType() + ", "
+          + "Table Name: " + tableName.getNameWithNamespaceInclAsString();
+
+    };
+
+    protected abstract class TableWaitForStateCallable implements WaitForStateCallable {
+      @Override
+      public void throwInterruptedException() throws InterruptedIOException {
+        throw new InterruptedIOException("Interrupted while waiting for operation: "
+            + getOperationType() + " on table: " + tableName.getNameWithNamespaceInclAsString());
+      }
+
+      @Override
+      public void throwTimeoutException(long elapsedTime) throws TimeoutException {
+        throw new TimeoutException("The operation: " + getOperationType() + " on table: " +
+            tableName.getNameAsString() + " not completed after " + elapsedTime + "msec");
+      }
+    }
 
     @Override
     protected V postOperationResult(final V result, final long deadlineTs)
@@ -4282,7 +4336,7 @@ public class HBaseAdmin implements Admin {
 
     protected void waitForTableEnabled(final long deadlineTs)
         throws IOException, TimeoutException {
-      waitForState(deadlineTs, new WaitForStateCallable() {
+      waitForState(deadlineTs, new TableWaitForStateCallable() {
         @Override
         public boolean checkState(int tries) throws IOException {
           try {
@@ -4290,43 +4344,40 @@ public class HBaseAdmin implements Admin {
               return true;
             }
           } catch (TableNotFoundException tnfe) {
-            LOG.debug("Table " + tableName.getNameAsString()
+            LOG.debug("Table " + tableName.getNameWithNamespaceInclAsString()
                 + " was not enabled, sleeping. tries=" + tries);
           }
           return false;
         }
-
-        @Override
-        public void throwInterruptedException() throws InterruptedIOException {
-          throw new InterruptedIOException("Interrupted when waiting for table "
-              + tableName.getNameAsString() + " to be enabled");
-        }
-
-        @Override
-        public void throwTimeoutException(long elapsedTime) throws TimeoutException {
-          throw new TimeoutException("Table " + tableName.getNameAsString()
-              + " not enabled after " + elapsedTime + "msec");
-        }
       });
     }
 
     protected void waitForTableDisabled(final long deadlineTs)
         throws IOException, TimeoutException {
-      waitForState(deadlineTs, new WaitForStateCallable() {
+      waitForState(deadlineTs, new TableWaitForStateCallable() {
         @Override
         public boolean checkState(int tries) throws IOException {
           return getAdmin().isTableDisabled(tableName);
         }
+      });
+    }
 
+    protected void waitTableNotFound(final long deadlineTs)
+        throws IOException, TimeoutException {
+      waitForState(deadlineTs, new TableWaitForStateCallable() {
         @Override
-        public void throwInterruptedException() throws InterruptedIOException {
-          throw new InterruptedIOException("Interrupted when waiting for table to be disabled");
+        public boolean checkState(int tries) throws IOException {
+          return !getAdmin().tableExists(tableName);
         }
+      });
+    }
 
+    protected void waitForSchemaUpdate(final long deadlineTs)
+        throws IOException, TimeoutException {
+      waitForState(deadlineTs, new TableWaitForStateCallable() {
         @Override
-        public void throwTimeoutException(long elapsedTime) throws TimeoutException {
-          throw new TimeoutException("Table " + tableName + " not yet disabled after "
-              + elapsedTime + "msec");
+        public boolean checkState(int tries) throws IOException {
+          return getAdmin().getAlterStatus(tableName).getFirst() == 0;
         }
       });
     }
@@ -4385,26 +4436,5 @@ public class HBaseAdmin implements Admin {
       throw new TimeoutException("Only " + actualRegCount.get() + " of " + numRegs
           + " regions are online; retries exhausted.");
     }
-
-    protected void waitTableNotFound(final long deadlineTs)
-        throws IOException, TimeoutException {
-      waitForState(deadlineTs, new WaitForStateCallable() {
-        @Override
-        public boolean checkState(int tries) throws IOException {
-          return !getAdmin().tableExists(tableName);
-        }
-
-        @Override
-        public void throwInterruptedException() throws InterruptedIOException {
-          throw new InterruptedIOException("Interrupted when waiting for table to be deleted");
-        }
-
-        @Override
-        public void throwTimeoutException(long elapsedTime) throws TimeoutException {
-          throw new TimeoutException("Table " + tableName + " not yet deleted after "
-              + elapsedTime + "msec");
-        }
-      });
-    }
   }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/9e131dfa/hbase-protocol/src/main/java/org/apache/hadoop/hbase/protobuf/generated/MasterProtos.java
----------------------------------------------------------------------
diff --git a/hbase-protocol/src/main/java/org/apache/hadoop/hbase/protobuf/generated/MasterProtos.java b/hbase-protocol/src/main/java/org/apache/hadoop/hbase/protobuf/generated/MasterProtos.java
index f660bdd..a762d00 100644
--- a/hbase-protocol/src/main/java/org/apache/hadoop/hbase/protobuf/generated/MasterProtos.java
+++ b/hbase-protocol/src/main/java/org/apache/hadoop/hbase/protobuf/generated/MasterProtos.java
@@ -14356,6 +14356,16 @@ public final class MasterProtos {
 
   public interface ModifyTableResponseOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
+
+    // optional uint64 proc_id = 1;
+    /**
+     * <code>optional uint64 proc_id = 1;</code>
+     */
+    boolean hasProcId();
+    /**
+     * <code>optional uint64 proc_id = 1;</code>
+     */
+    long getProcId();
   }
   /**
    * Protobuf type {@code ModifyTableResponse}
@@ -14390,6 +14400,7 @@ public final class MasterProtos {
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       initFields();
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -14407,6 +14418,11 @@ public final class MasterProtos {
               }
               break;
             }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              procId_ = input.readUInt64();
+              break;
+            }
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
@@ -14446,7 +14462,25 @@ public final class MasterProtos {
       return PARSER;
     }
 
+    private int bitField0_;
+    // optional uint64 proc_id = 1;
+    public static final int PROC_ID_FIELD_NUMBER = 1;
+    private long procId_;
+    /**
+     * <code>optional uint64 proc_id = 1;</code>
+     */
+    public boolean hasProcId() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>optional uint64 proc_id = 1;</code>
+     */
+    public long getProcId() {
+      return procId_;
+    }
+
     private void initFields() {
+      procId_ = 0L;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -14460,6 +14494,9 @@ public final class MasterProtos {
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeUInt64(1, procId_);
+      }
       getUnknownFields().writeTo(output);
     }
 
@@ -14469,6 +14506,10 @@ public final class MasterProtos {
       if (size != -1) return size;
 
       size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt64Size(1, procId_);
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -14492,6 +14533,11 @@ public final class MasterProtos {
       org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyTableResponse other = (org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyTableResponse) obj;
 
       boolean result = true;
+      result = result && (hasProcId() == other.hasProcId());
+      if (hasProcId()) {
+        result = result && (getProcId()
+            == other.getProcId());
+      }
       result = result &&
           getUnknownFields().equals(other.getUnknownFields());
       return result;
@@ -14505,6 +14551,10 @@ public final class MasterProtos {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptorForType().hashCode();
+      if (hasProcId()) {
+        hash = (37 * hash) + PROC_ID_FIELD_NUMBER;
+        hash = (53 * hash) + hashLong(getProcId());
+      }
       hash = (29 * hash) + getUnknownFields().hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -14614,6 +14664,8 @@ public final class MasterProtos {
 
       public Builder clear() {
         super.clear();
+        procId_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000001);
         return this;
       }
 
@@ -14640,6 +14692,13 @@ public final class MasterProtos {
 
       public org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyTableResponse buildPartial() {
         org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyTableResponse result = new org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyTableResponse(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.procId_ = procId_;
+        result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
@@ -14655,6 +14714,9 @@ public final class MasterProtos {
 
       public Builder mergeFrom(org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyTableResponse other) {
         if (other == org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyTableResponse.getDefaultInstance()) return this;
+        if (other.hasProcId()) {
+          setProcId(other.getProcId());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -14680,6 +14742,40 @@ public final class MasterProtos {
         }
         return this;
       }
+      private int bitField0_;
+
+      // optional uint64 proc_id = 1;
+      private long procId_ ;
+      /**
+       * <code>optional uint64 proc_id = 1;</code>
+       */
+      public boolean hasProcId() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      /**
+       * <code>optional uint64 proc_id = 1;</code>
+       */
+      public long getProcId() {
+        return procId_;
+      }
+      /**
+       * <code>optional uint64 proc_id = 1;</code>
+       */
+      public Builder setProcId(long value) {
+        bitField0_ |= 0x00000001;
+        procId_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional uint64 proc_id = 1;</code>
+       */
+      public Builder clearProcId() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        procId_ = 0L;
+        onChanged();
+        return this;
+      }
 
       // @@protoc_insertion_point(builder_scope:ModifyTableResponse)
     }
@@ -53254,195 +53350,195 @@ public final class MasterProtos {
       "e\"\'\n\024DisableTableResponse\022\017\n\007proc_id\030\001 \001" +
       "(\004\"X\n\022ModifyTableRequest\022\036\n\ntable_name\030\001" +
       " \002(\0132\n.TableName\022\"\n\014table_schema\030\002 \002(\0132\014",
-      ".TableSchema\"\025\n\023ModifyTableResponse\"K\n\026C" +
-      "reateNamespaceRequest\0221\n\023namespaceDescri" +
-      "ptor\030\001 \002(\0132\024.NamespaceDescriptor\"\031\n\027Crea" +
-      "teNamespaceResponse\"/\n\026DeleteNamespaceRe" +
-      "quest\022\025\n\rnamespaceName\030\001 \002(\t\"\031\n\027DeleteNa" +
-      "mespaceResponse\"K\n\026ModifyNamespaceReques" +
-      "t\0221\n\023namespaceDescriptor\030\001 \002(\0132\024.Namespa" +
-      "ceDescriptor\"\031\n\027ModifyNamespaceResponse\"" +
-      "6\n\035GetNamespaceDescriptorRequest\022\025\n\rname" +
-      "spaceName\030\001 \002(\t\"S\n\036GetNamespaceDescripto",
-      "rResponse\0221\n\023namespaceDescriptor\030\001 \002(\0132\024" +
-      ".NamespaceDescriptor\"!\n\037ListNamespaceDes" +
-      "criptorsRequest\"U\n ListNamespaceDescript" +
-      "orsResponse\0221\n\023namespaceDescriptor\030\001 \003(\013" +
-      "2\024.NamespaceDescriptor\"?\n&ListTableDescr" +
-      "iptorsByNamespaceRequest\022\025\n\rnamespaceNam" +
-      "e\030\001 \002(\t\"L\n\'ListTableDescriptorsByNamespa" +
-      "ceResponse\022!\n\013tableSchema\030\001 \003(\0132\014.TableS" +
-      "chema\"9\n ListTableNamesByNamespaceReques" +
-      "t\022\025\n\rnamespaceName\030\001 \002(\t\"B\n!ListTableNam",
-      "esByNamespaceResponse\022\035\n\ttableName\030\001 \003(\013" +
-      "2\n.TableName\"\021\n\017ShutdownRequest\"\022\n\020Shutd" +
-      "ownResponse\"\023\n\021StopMasterRequest\"\024\n\022Stop" +
-      "MasterResponse\"\020\n\016BalanceRequest\"\'\n\017Bala" +
-      "nceResponse\022\024\n\014balancer_ran\030\001 \002(\010\"<\n\031Set" +
-      "BalancerRunningRequest\022\n\n\002on\030\001 \002(\010\022\023\n\013sy" +
-      "nchronous\030\002 \001(\010\"8\n\032SetBalancerRunningRes" +
-      "ponse\022\032\n\022prev_balance_value\030\001 \001(\010\"\032\n\030IsB" +
-      "alancerEnabledRequest\",\n\031IsBalancerEnabl" +
-      "edResponse\022\017\n\007enabled\030\001 \002(\010\"\027\n\025RunCatalo",
-      "gScanRequest\"-\n\026RunCatalogScanResponse\022\023" +
-      "\n\013scan_result\030\001 \001(\005\"-\n\033EnableCatalogJani" +
-      "torRequest\022\016\n\006enable\030\001 \002(\010\"2\n\034EnableCata" +
-      "logJanitorResponse\022\022\n\nprev_value\030\001 \001(\010\" " +
-      "\n\036IsCatalogJanitorEnabledRequest\"0\n\037IsCa" +
-      "talogJanitorEnabledResponse\022\r\n\005value\030\001 \002" +
-      "(\010\"9\n\017SnapshotRequest\022&\n\010snapshot\030\001 \002(\0132" +
-      "\024.SnapshotDescription\",\n\020SnapshotRespons" +
-      "e\022\030\n\020expected_timeout\030\001 \002(\003\"\036\n\034GetComple" +
-      "tedSnapshotsRequest\"H\n\035GetCompletedSnaps",
-      "hotsResponse\022\'\n\tsnapshots\030\001 \003(\0132\024.Snapsh" +
-      "otDescription\"?\n\025DeleteSnapshotRequest\022&" +
-      "\n\010snapshot\030\001 \002(\0132\024.SnapshotDescription\"\030" +
-      "\n\026DeleteSnapshotResponse\"@\n\026RestoreSnaps" +
-      "hotRequest\022&\n\010snapshot\030\001 \002(\0132\024.SnapshotD" +
-      "escription\"\031\n\027RestoreSnapshotResponse\"?\n" +
-      "\025IsSnapshotDoneRequest\022&\n\010snapshot\030\001 \001(\013" +
-      "2\024.SnapshotDescription\"U\n\026IsSnapshotDone" +
-      "Response\022\023\n\004done\030\001 \001(\010:\005false\022&\n\010snapsho" +
-      "t\030\002 \001(\0132\024.SnapshotDescription\"F\n\034IsResto",
-      "reSnapshotDoneRequest\022&\n\010snapshot\030\001 \001(\0132" +
-      "\024.SnapshotDescription\"4\n\035IsRestoreSnapsh" +
-      "otDoneResponse\022\023\n\004done\030\001 \001(\010:\005false\"=\n\033G" +
-      "etSchemaAlterStatusRequest\022\036\n\ntable_name" +
-      "\030\001 \002(\0132\n.TableName\"T\n\034GetSchemaAlterStat" +
-      "usResponse\022\035\n\025yet_to_update_regions\030\001 \001(" +
-      "\r\022\025\n\rtotal_regions\030\002 \001(\r\"\202\001\n\032GetTableDes" +
-      "criptorsRequest\022\037\n\013table_names\030\001 \003(\0132\n.T" +
-      "ableName\022\r\n\005regex\030\002 \001(\t\022!\n\022include_sys_t" +
-      "ables\030\003 \001(\010:\005false\022\021\n\tnamespace\030\004 \001(\t\"A\n",
-      "\033GetTableDescriptorsResponse\022\"\n\014table_sc" +
-      "hema\030\001 \003(\0132\014.TableSchema\"[\n\024GetTableName" +
-      "sRequest\022\r\n\005regex\030\001 \001(\t\022!\n\022include_sys_t" +
-      "ables\030\002 \001(\010:\005false\022\021\n\tnamespace\030\003 \001(\t\"8\n" +
-      "\025GetTableNamesResponse\022\037\n\013table_names\030\001 " +
-      "\003(\0132\n.TableName\"6\n\024GetTableStateRequest\022" +
-      "\036\n\ntable_name\030\001 \002(\0132\n.TableName\"9\n\025GetTa" +
-      "bleStateResponse\022 \n\013table_state\030\001 \002(\0132\013." +
-      "TableState\"\031\n\027GetClusterStatusRequest\"B\n" +
-      "\030GetClusterStatusResponse\022&\n\016cluster_sta",
-      "tus\030\001 \002(\0132\016.ClusterStatus\"\030\n\026IsMasterRun" +
-      "ningRequest\"4\n\027IsMasterRunningResponse\022\031" +
-      "\n\021is_master_running\030\001 \002(\010\"@\n\024ExecProcedu" +
-      "reRequest\022(\n\tprocedure\030\001 \002(\0132\025.Procedure" +
-      "Description\"F\n\025ExecProcedureResponse\022\030\n\020" +
-      "expected_timeout\030\001 \001(\003\022\023\n\013return_data\030\002 " +
-      "\001(\014\"B\n\026IsProcedureDoneRequest\022(\n\tprocedu" +
-      "re\030\001 \001(\0132\025.ProcedureDescription\"W\n\027IsPro" +
-      "cedureDoneResponse\022\023\n\004done\030\001 \001(\010:\005false\022" +
-      "\'\n\010snapshot\030\002 \001(\0132\025.ProcedureDescription",
-      "\",\n\031GetProcedureResultRequest\022\017\n\007proc_id" +
-      "\030\001 \002(\004\"\347\001\n\032GetProcedureResultResponse\0220\n" +
-      "\005state\030\001 \002(\0162!.GetProcedureResultRespons" +
-      "e.State\022\022\n\nstart_time\030\002 \001(\004\022\023\n\013last_upda" +
-      "te\030\003 \001(\004\022\016\n\006result\030\004 \001(\014\022+\n\texception\030\005 " +
-      "\001(\0132\030.ForeignExceptionMessage\"1\n\005State\022\r" +
-      "\n\tNOT_FOUND\020\000\022\013\n\007RUNNING\020\001\022\014\n\010FINISHED\020\002" +
-      "\"\273\001\n\017SetQuotaRequest\022\021\n\tuser_name\030\001 \001(\t\022" +
-      "\022\n\nuser_group\030\002 \001(\t\022\021\n\tnamespace\030\003 \001(\t\022\036" +
-      "\n\ntable_name\030\004 \001(\0132\n.TableName\022\022\n\nremove",
-      "_all\030\005 \001(\010\022\026\n\016bypass_globals\030\006 \001(\010\022\"\n\010th" +
-      "rottle\030\007 \001(\0132\020.ThrottleRequest\"\022\n\020SetQuo" +
-      "taResponse\"A\n\037MajorCompactionTimestampRe" +
-      "quest\022\036\n\ntable_name\030\001 \002(\0132\n.TableName\"L\n" +
-      "(MajorCompactionTimestampForRegionReques" +
-      "t\022 \n\006region\030\001 \002(\0132\020.RegionSpecifier\"@\n M" +
-      "ajorCompactionTimestampResponse\022\034\n\024compa" +
-      "ction_timestamp\030\001 \002(\0032\343\033\n\rMasterService\022" +
-      "S\n\024GetSchemaAlterStatus\022\034.GetSchemaAlter" +
-      "StatusRequest\032\035.GetSchemaAlterStatusResp",
-      "onse\022P\n\023GetTableDescriptors\022\033.GetTableDe" +
-      "scriptorsRequest\032\034.GetTableDescriptorsRe" +
-      "sponse\022>\n\rGetTableNames\022\025.GetTableNamesR" +
-      "equest\032\026.GetTableNamesResponse\022G\n\020GetClu" +
-      "sterStatus\022\030.GetClusterStatusRequest\032\031.G" +
-      "etClusterStatusResponse\022D\n\017IsMasterRunni" +
-      "ng\022\027.IsMasterRunningRequest\032\030.IsMasterRu" +
-      "nningResponse\0222\n\tAddColumn\022\021.AddColumnRe" +
-      "quest\032\022.AddColumnResponse\022;\n\014DeleteColum" +
-      "n\022\024.DeleteColumnRequest\032\025.DeleteColumnRe",
-      "sponse\022;\n\014ModifyColumn\022\024.ModifyColumnReq" +
-      "uest\032\025.ModifyColumnResponse\0225\n\nMoveRegio" +
-      "n\022\022.MoveRegionRequest\032\023.MoveRegionRespon" +
-      "se\022Y\n\026DispatchMergingRegions\022\036.DispatchM" +
-      "ergingRegionsRequest\032\037.DispatchMergingRe" +
-      "gionsResponse\022;\n\014AssignRegion\022\024.AssignRe" +
-      "gionRequest\032\025.AssignRegionResponse\022A\n\016Un" +
-      "assignRegion\022\026.UnassignRegionRequest\032\027.U" +
-      "nassignRegionResponse\022>\n\rOfflineRegion\022\025" +
-      ".OfflineRegionRequest\032\026.OfflineRegionRes",
-      "ponse\0228\n\013DeleteTable\022\023.DeleteTableReques" +
-      "t\032\024.DeleteTableResponse\022>\n\rtruncateTable" +
-      "\022\025.TruncateTableRequest\032\026.TruncateTableR" +
-      "esponse\0228\n\013EnableTable\022\023.EnableTableRequ" +
-      "est\032\024.EnableTableResponse\022;\n\014DisableTabl" +
-      "e\022\024.DisableTableRequest\032\025.DisableTableRe" +
-      "sponse\0228\n\013ModifyTable\022\023.ModifyTableReque" +
-      "st\032\024.ModifyTableResponse\0228\n\013CreateTable\022" +
-      "\023.CreateTableRequest\032\024.CreateTableRespon" +
-      "se\022/\n\010Shutdown\022\020.ShutdownRequest\032\021.Shutd",
-      "ownResponse\0225\n\nStopMaster\022\022.StopMasterRe" +
-      "quest\032\023.StopMasterResponse\022,\n\007Balance\022\017." +
-      "BalanceRequest\032\020.BalanceResponse\022M\n\022SetB" +
-      "alancerRunning\022\032.SetBalancerRunningReque" +
-      "st\032\033.SetBalancerRunningResponse\022J\n\021IsBal" +
-      "ancerEnabled\022\031.IsBalancerEnabledRequest\032" +
-      "\032.IsBalancerEnabledResponse\022A\n\016RunCatalo" +
-      "gScan\022\026.RunCatalogScanRequest\032\027.RunCatal" +
-      "ogScanResponse\022S\n\024EnableCatalogJanitor\022\034" +
-      ".EnableCatalogJanitorRequest\032\035.EnableCat",
-      "alogJanitorResponse\022\\\n\027IsCatalogJanitorE" +
-      "nabled\022\037.IsCatalogJanitorEnabledRequest\032" +
-      " .IsCatalogJanitorEnabledResponse\022L\n\021Exe" +
-      "cMasterService\022\032.CoprocessorServiceReque" +
-      "st\032\033.CoprocessorServiceResponse\022/\n\010Snaps" +
-      "hot\022\020.SnapshotRequest\032\021.SnapshotResponse" +
-      "\022V\n\025GetCompletedSnapshots\022\035.GetCompleted" +
-      "SnapshotsRequest\032\036.GetCompletedSnapshots" +
-      "Response\022A\n\016DeleteSnapshot\022\026.DeleteSnaps" +
-      "hotRequest\032\027.DeleteSnapshotResponse\022A\n\016I",
-      "sSnapshotDone\022\026.IsSnapshotDoneRequest\032\027." +
-      "IsSnapshotDoneResponse\022D\n\017RestoreSnapsho" +
-      "t\022\027.RestoreSnapshotRequest\032\030.RestoreSnap" +
-      "shotResponse\022V\n\025IsRestoreSnapshotDone\022\035." +
-      "IsRestoreSnapshotDoneRequest\032\036.IsRestore" +
-      "SnapshotDoneResponse\022>\n\rExecProcedure\022\025." +
-      "ExecProcedureRequest\032\026.ExecProcedureResp" +
-      "onse\022E\n\024ExecProcedureWithRet\022\025.ExecProce" +
-      "dureRequest\032\026.ExecProcedureResponse\022D\n\017I" +
-      "sProcedureDone\022\027.IsProcedureDoneRequest\032",
-      "\030.IsProcedureDoneResponse\022D\n\017ModifyNames" +
-      "pace\022\027.ModifyNamespaceRequest\032\030.ModifyNa" +
-      "mespaceResponse\022D\n\017CreateNamespace\022\027.Cre" +
-      "ateNamespaceRequest\032\030.CreateNamespaceRes" +
-      "ponse\022D\n\017DeleteNamespace\022\027.DeleteNamespa" +
-      "ceRequest\032\030.DeleteNamespaceResponse\022Y\n\026G" +
-      "etNamespaceDescriptor\022\036.GetNamespaceDesc" +
-      "riptorRequest\032\037.GetNamespaceDescriptorRe" +
-      "sponse\022_\n\030ListNamespaceDescriptors\022 .Lis" +
-      "tNamespaceDescriptorsRequest\032!.ListNames",
-      "paceDescriptorsResponse\022t\n\037ListTableDesc" +
-      "riptorsByNamespace\022\'.ListTableDescriptor" +
-      "sByNamespaceRequest\032(.ListTableDescripto" +
-      "rsByNamespaceResponse\022b\n\031ListTableNamesB" +
-      "yNamespace\022!.ListTableNamesByNamespaceRe" +
-      "quest\032\".ListTableNamesByNamespaceRespons" +
-      "e\022>\n\rGetTableState\022\025.GetTableStateReques" +
-      "t\032\026.GetTableStateResponse\022/\n\010SetQuota\022\020." +
-      "SetQuotaRequest\032\021.SetQuotaResponse\022f\n\037ge" +
-      "tLastMajorCompactionTimestamp\022 .MajorCom",
-      "pactionTimestampRequest\032!.MajorCompactio" +
-      "nTimestampResponse\022x\n(getLastMajorCompac" +
-      "tionTimestampForRegion\022).MajorCompaction" +
-      "TimestampForRegionRequest\032!.MajorCompact" +
-      "ionTimestampResponse\022M\n\022getProcedureResu" +
-      "lt\022\032.GetProcedureResultRequest\032\033.GetProc" +
-      "edureResultResponseBB\n*org.apache.hadoop" +
-      ".hbase.protobuf.generatedB\014MasterProtosH" +
-      "\001\210\001\001\240\001\001"
+      ".TableSchema\"&\n\023ModifyTableResponse\022\017\n\007p" +
+      "roc_id\030\001 \001(\004\"K\n\026CreateNamespaceRequest\0221" +
+      "\n\023namespaceDescriptor\030\001 \002(\0132\024.NamespaceD" +
+      "escriptor\"\031\n\027CreateNamespaceResponse\"/\n\026" +
+      "DeleteNamespaceRequest\022\025\n\rnamespaceName\030" +
+      "\001 \002(\t\"\031\n\027DeleteNamespaceResponse\"K\n\026Modi" +
+      "fyNamespaceRequest\0221\n\023namespaceDescripto" +
+      "r\030\001 \002(\0132\024.NamespaceDescriptor\"\031\n\027ModifyN" +
+      "amespaceResponse\"6\n\035GetNamespaceDescript" +
+      "orRequest\022\025\n\rnamespaceName\030\001 \002(\t\"S\n\036GetN",
+      "amespaceDescriptorResponse\0221\n\023namespaceD" +
+      "escriptor\030\001 \002(\0132\024.NamespaceDescriptor\"!\n" +
+      "\037ListNamespaceDescriptorsRequest\"U\n List" +
+      "NamespaceDescriptorsResponse\0221\n\023namespac" +
+      "eDescriptor\030\001 \003(\0132\024.NamespaceDescriptor\"" +
+      "?\n&ListTableDescriptorsByNamespaceReques" +
+      "t\022\025\n\rnamespaceName\030\001 \002(\t\"L\n\'ListTableDes" +
+      "criptorsByNamespaceResponse\022!\n\013tableSche" +
+      "ma\030\001 \003(\0132\014.TableSchema\"9\n ListTableNames" +
+      "ByNamespaceRequest\022\025\n\rnamespaceName\030\001 \002(",
+      "\t\"B\n!ListTableNamesByNamespaceResponse\022\035" +
+      "\n\ttableName\030\001 \003(\0132\n.TableName\"\021\n\017Shutdow" +
+      "nRequest\"\022\n\020ShutdownResponse\"\023\n\021StopMast" +
+      "erRequest\"\024\n\022StopMasterResponse\"\020\n\016Balan" +
+      "ceRequest\"\'\n\017BalanceResponse\022\024\n\014balancer" +
+      "_ran\030\001 \002(\010\"<\n\031SetBalancerRunningRequest\022" +
+      "\n\n\002on\030\001 \002(\010\022\023\n\013synchronous\030\002 \001(\010\"8\n\032SetB" +
+      "alancerRunningResponse\022\032\n\022prev_balance_v" +
+      "alue\030\001 \001(\010\"\032\n\030IsBalancerEnabledRequest\"," +
+      "\n\031IsBalancerEnabledResponse\022\017\n\007enabled\030\001",
+      " \002(\010\"\027\n\025RunCatalogScanRequest\"-\n\026RunCata" +
+      "logScanResponse\022\023\n\013scan_result\030\001 \001(\005\"-\n\033" +
+      "EnableCatalogJanitorRequest\022\016\n\006enable\030\001 " +
+      "\002(\010\"2\n\034EnableCatalogJanitorResponse\022\022\n\np" +
+      "rev_value\030\001 \001(\010\" \n\036IsCatalogJanitorEnabl" +
+      "edRequest\"0\n\037IsCatalogJanitorEnabledResp" +
+      "onse\022\r\n\005value\030\001 \002(\010\"9\n\017SnapshotRequest\022&" +
+      "\n\010snapshot\030\001 \002(\0132\024.SnapshotDescription\"," +
+      "\n\020SnapshotResponse\022\030\n\020expected_timeout\030\001" +
+      " \002(\003\"\036\n\034GetCompletedSnapshotsRequest\"H\n\035",
+      "GetCompletedSnapshotsResponse\022\'\n\tsnapsho" +
+      "ts\030\001 \003(\0132\024.SnapshotDescription\"?\n\025Delete" +
+      "SnapshotRequest\022&\n\010snapshot\030\001 \002(\0132\024.Snap" +
+      "shotDescription\"\030\n\026DeleteSnapshotRespons" +
+      "e\"@\n\026RestoreSnapshotRequest\022&\n\010snapshot\030" +
+      "\001 \002(\0132\024.SnapshotDescription\"\031\n\027RestoreSn" +
+      "apshotResponse\"?\n\025IsSnapshotDoneRequest\022" +
+      "&\n\010snapshot\030\001 \001(\0132\024.SnapshotDescription\"" +
+      "U\n\026IsSnapshotDoneResponse\022\023\n\004done\030\001 \001(\010:" +
+      "\005false\022&\n\010snapshot\030\002 \001(\0132\024.SnapshotDescr",
+      "iption\"F\n\034IsRestoreSnapshotDoneRequest\022&" +
+      "\n\010snapshot\030\001 \001(\0132\024.SnapshotDescription\"4" +
+      "\n\035IsRestoreSnapshotDoneResponse\022\023\n\004done\030" +
+      "\001 \001(\010:\005false\"=\n\033GetSchemaAlterStatusRequ" +
+      "est\022\036\n\ntable_name\030\001 \002(\0132\n.TableName\"T\n\034G" +
+      "etSchemaAlterStatusResponse\022\035\n\025yet_to_up" +
+      "date_regions\030\001 \001(\r\022\025\n\rtotal_regions\030\002 \001(" +
+      "\r\"\202\001\n\032GetTableDescriptorsRequest\022\037\n\013tabl" +
+      "e_names\030\001 \003(\0132\n.TableName\022\r\n\005regex\030\002 \001(\t" +
+      "\022!\n\022include_sys_tables\030\003 \001(\010:\005false\022\021\n\tn",
+      "amespace\030\004 \001(\t\"A\n\033GetTableDescriptorsRes" +
+      "ponse\022\"\n\014table_schema\030\001 \003(\0132\014.TableSchem" +
+      "a\"[\n\024GetTableNamesRequest\022\r\n\005regex\030\001 \001(\t" +
+      "\022!\n\022include_sys_tables\030\002 \001(\010:\005false\022\021\n\tn" +
+      "amespace\030\003 \001(\t\"8\n\025GetTableNamesResponse\022" +
+      "\037\n\013table_names\030\001 \003(\0132\n.TableName\"6\n\024GetT" +
+      "ableStateRequest\022\036\n\ntable_name\030\001 \002(\0132\n.T" +
+      "ableName\"9\n\025GetTableStateResponse\022 \n\013tab" +
+      "le_state\030\001 \002(\0132\013.TableState\"\031\n\027GetCluste" +
+      "rStatusRequest\"B\n\030GetClusterStatusRespon",
+      "se\022&\n\016cluster_status\030\001 \002(\0132\016.ClusterStat" +
+      "us\"\030\n\026IsMasterRunningRequest\"4\n\027IsMaster" +
+      "RunningResponse\022\031\n\021is_master_running\030\001 \002" +
+      "(\010\"@\n\024ExecProcedureRequest\022(\n\tprocedure\030" +
+      "\001 \002(\0132\025.ProcedureDescription\"F\n\025ExecProc" +
+      "edureResponse\022\030\n\020expected_timeout\030\001 \001(\003\022" +
+      "\023\n\013return_data\030\002 \001(\014\"B\n\026IsProcedureDoneR" +
+      "equest\022(\n\tprocedure\030\001 \001(\0132\025.ProcedureDes" +
+      "cription\"W\n\027IsProcedureDoneResponse\022\023\n\004d" +
+      "one\030\001 \001(\010:\005false\022\'\n\010snapshot\030\002 \001(\0132\025.Pro",
+      "cedureDescription\",\n\031GetProcedureResultR" +
+      "equest\022\017\n\007proc_id\030\001 \002(\004\"\347\001\n\032GetProcedure" +
+      "ResultResponse\0220\n\005state\030\001 \002(\0162!.GetProce" +
+      "dureResultResponse.State\022\022\n\nstart_time\030\002" +
+      " \001(\004\022\023\n\013last_update\030\003 \001(\004\022\016\n\006result\030\004 \001(" +
+      "\014\022+\n\texception\030\005 \001(\0132\030.ForeignExceptionM" +
+      "essage\"1\n\005State\022\r\n\tNOT_FOUND\020\000\022\013\n\007RUNNIN" +
+      "G\020\001\022\014\n\010FINISHED\020\002\"\273\001\n\017SetQuotaRequest\022\021\n" +
+      "\tuser_name\030\001 \001(\t\022\022\n\nuser_group\030\002 \001(\t\022\021\n\t" +
+      "namespace\030\003 \001(\t\022\036\n\ntable_name\030\004 \001(\0132\n.Ta",
+      "bleName\022\022\n\nremove_all\030\005 \001(\010\022\026\n\016bypass_gl" +
+      "obals\030\006 \001(\010\022\"\n\010throttle\030\007 \001(\0132\020.Throttle" +
+      "Request\"\022\n\020SetQuotaResponse\"A\n\037MajorComp" +
+      "actionTimestampRequest\022\036\n\ntable_name\030\001 \002" +
+      "(\0132\n.TableName\"L\n(MajorCompactionTimesta" +
+      "mpForRegionRequest\022 \n\006region\030\001 \002(\0132\020.Reg" +
+      "ionSpecifier\"@\n MajorCompactionTimestamp" +
+      "Response\022\034\n\024compaction_timestamp\030\001 \002(\0032\343" +
+      "\033\n\rMasterService\022S\n\024GetSchemaAlterStatus" +
+      "\022\034.GetSchemaAlterStatusRequest\032\035.GetSche",
+      "maAlterStatusResponse\022P\n\023GetTableDescrip" +
+      "tors\022\033.GetTableDescriptorsRequest\032\034.GetT" +
+      "ableDescriptorsResponse\022>\n\rGetTableNames" +
+      "\022\025.GetTableNamesRequest\032\026.GetTableNamesR" +
+      "esponse\022G\n\020GetClusterStatus\022\030.GetCluster" +
+      "StatusRequest\032\031.GetClusterStatusResponse" +
+      "\022D\n\017IsMasterRunning\022\027.IsMasterRunningReq" +
+      "uest\032\030.IsMasterRunningResponse\0222\n\tAddCol" +
+      "umn\022\021.AddColumnRequest\032\022.AddColumnRespon" +
+      "se\022;\n\014DeleteColumn\022\024.DeleteColumnRequest",
+      "\032\025.DeleteColumnResponse\022;\n\014ModifyColumn\022" +
+      "\024.ModifyColumnRequest\032\025.ModifyColumnResp" +
+      "onse\0225\n\nMoveRegion\022\022.MoveRegionRequest\032\023" +
+      ".MoveRegionResponse\022Y\n\026DispatchMergingRe" +
+      "gions\022\036.DispatchMergingRegionsRequest\032\037." +
+      "DispatchMergingRegionsResponse\022;\n\014Assign" +
+      "Region\022\024.AssignRegionRequest\032\025.AssignReg" +
+      "ionResponse\022A\n\016UnassignRegion\022\026.Unassign" +
+      "RegionRequest\032\027.UnassignRegionResponse\022>" +
+      "\n\rOfflineRegion\022\025.OfflineRegionRequest\032\026",
+      ".OfflineRegionResponse\0228\n\013DeleteTable\022\023." +
+      "DeleteTableRequest\032\024.DeleteTableResponse" +
+      "\022>\n\rtruncateTable\022\025.TruncateTableRequest" +
+      "\032\026.TruncateTableResponse\0228\n\013EnableTable\022" +
+      "\023.EnableTableRequest\032\024.EnableTableRespon" +
+      "se\022;\n\014DisableTable\022\024.DisableTableRequest" +
+      "\032\025.DisableTableResponse\0228\n\013ModifyTable\022\023" +
+      ".ModifyTableRequest\032\024.ModifyTableRespons" +
+      "e\0228\n\013CreateTable\022\023.CreateTableRequest\032\024." +
+      "CreateTableResponse\022/\n\010Shutdown\022\020.Shutdo",
+      "wnRequest\032\021.ShutdownResponse\0225\n\nStopMast" +
+      "er\022\022.StopMasterRequest\032\023.StopMasterRespo" +
+      "nse\022,\n\007Balance\022\017.BalanceRequest\032\020.Balanc" +
+      "eResponse\022M\n\022SetBalancerRunning\022\032.SetBal" +
+      "ancerRunningRequest\032\033.SetBalancerRunning" +
+      "Response\022J\n\021IsBalancerEnabled\022\031.IsBalanc" +
+      "erEnabledRequest\032\032.IsBalancerEnabledResp" +
+      "onse\022A\n\016RunCatalogScan\022\026.RunCatalogScanR" +
+      "equest\032\027.RunCatalogScanResponse\022S\n\024Enabl" +
+      "eCatalogJanitor\022\034.EnableCatalogJanitorRe",
+      "quest\032\035.EnableCatalogJanitorResponse\022\\\n\027" +
+      "IsCatalogJanitorEnabled\022\037.IsCatalogJanit" +
+      "orEnabledRequest\032 .IsCatalogJanitorEnabl" +
+      "edResponse\022L\n\021ExecMasterService\022\032.Coproc" +
+      "essorServiceRequest\032\033.CoprocessorService" +
+      "Response\022/\n\010Snapshot\022\020.SnapshotRequest\032\021" +
+      ".SnapshotResponse\022V\n\025GetCompletedSnapsho" +
+      "ts\022\035.GetCompletedSnapshotsRequest\032\036.GetC" +
+      "ompletedSnapshotsResponse\022A\n\016DeleteSnaps" +
+      "hot\022\026.DeleteSnapshotRequest\032\027.DeleteSnap",
+      "shotResponse\022A\n\016IsSnapshotDone\022\026.IsSnaps" +
+      "hotDoneRequest\032\027.IsSnapshotDoneResponse\022" +
+      "D\n\017RestoreSnapshot\022\027.RestoreSnapshotRequ" +
+      "est\032\030.RestoreSnapshotResponse\022V\n\025IsResto" +
+      "reSnapshotDone\022\035.IsRestoreSnapshotDoneRe" +
+      "quest\032\036.IsRestoreSnapshotDoneResponse\022>\n" +
+      "\rExecProcedure\022\025.ExecProcedureRequest\032\026." +
+      "ExecProcedureResponse\022E\n\024ExecProcedureWi" +
+      "thRet\022\025.ExecProcedureRequest\032\026.ExecProce" +
+      "dureResponse\022D\n\017IsProcedureDone\022\027.IsProc",
+      "edureDoneRequest\032\030.IsProcedureDoneRespon" +
+      "se\022D\n\017ModifyNamespace\022\027.ModifyNamespaceR" +
+      "equest\032\030.ModifyNamespaceResponse\022D\n\017Crea" +
+      "teNamespace\022\027.CreateNamespaceRequest\032\030.C" +
+      "reateNamespaceResponse\022D\n\017DeleteNamespac" +
+      "e\022\027.DeleteNamespaceRequest\032\030.DeleteNames" +
+      "paceResponse\022Y\n\026GetNamespaceDescriptor\022\036" +
+      ".GetNamespaceDescriptorRequest\032\037.GetName" +
+      "spaceDescriptorResponse\022_\n\030ListNamespace" +
+      "Descriptors\022 .ListNamespaceDescriptorsRe",
+      "quest\032!.ListNamespaceDescriptorsResponse" +
+      "\022t\n\037ListTableDescriptorsByNamespace\022\'.Li" +
+      "stTableDescriptorsByNamespaceRequest\032(.L" +
+      "istTableDescriptorsByNamespaceResponse\022b" +
+      "\n\031ListTableNamesByNamespace\022!.ListTableN" +
+      "amesByNamespaceRequest\032\".ListTableNamesB" +
+      "yNamespaceResponse\022>\n\rGetTableState\022\025.Ge" +
+      "tTableStateRequest\032\026.GetTableStateRespon" +
+      "se\022/\n\010SetQuota\022\020.SetQuotaRequest\032\021.SetQu" +
+      "otaResponse\022f\n\037getLastMajorCompactionTim",
+      "estamp\022 .MajorCompactionTimestampRequest" +
+      "\032!.MajorCompactionTimestampResponse\022x\n(g" +
+      "etLastMajorCompactionTimestampForRegion\022" +
+      ").MajorCompactionTimestampForRegionReque" +
+      "st\032!.MajorCompactionTimestampResponse\022M\n" +
+      "\022getProcedureResult\022\032.GetProcedureResult" +
+      "Request\032\033.GetProcedureResultResponseBB\n*" +
+      "org.apache.hadoop.hbase.protobuf.generat" +
+      "edB\014MasterProtosH\001\210\001\001\240\001\001"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
       new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -53616,7 +53712,7 @@ public final class MasterProtos {
           internal_static_ModifyTableResponse_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_ModifyTableResponse_descriptor,
-              new java.lang.String[] { });
+              new java.lang.String[] { "ProcId", });
           internal_static_CreateNamespaceRequest_descriptor =
             getDescriptor().getMessageTypes().get(28);
           internal_static_CreateNamespaceRequest_fieldAccessorTable = new

http://git-wip-us.apache.org/repos/asf/hbase/blob/9e131dfa/hbase-protocol/src/main/protobuf/Master.proto
----------------------------------------------------------------------
diff --git a/hbase-protocol/src/main/protobuf/Master.proto b/hbase-protocol/src/main/protobuf/Master.proto
index ce2b940..990eb5b 100644
--- a/hbase-protocol/src/main/protobuf/Master.proto
+++ b/hbase-protocol/src/main/protobuf/Master.proto
@@ -151,6 +151,7 @@ message ModifyTableRequest {
 }
 
 message ModifyTableResponse {
+  optional uint64 proc_id = 1;
 }
 
 /* Namespace-level protobufs */

http://git-wip-us.apache.org/repos/asf/hbase/blob/9e131dfa/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index a39b3ea..ced6699 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -1784,7 +1784,7 @@ public class HMaster extends HRegionServer implements MasterServices, Server {
   }
 
   @Override
-  public void modifyTable(final TableName tableName, final HTableDescriptor descriptor)
+  public long modifyTable(final TableName tableName, final HTableDescriptor descriptor)
       throws IOException {
     checkInitialized();
     sanityCheckTableDescriptor(descriptor);
@@ -1803,6 +1803,8 @@ public class HMaster extends HRegionServer implements MasterServices, Server {
     if (cpHost != null) {
       cpHost.postModifyTable(tableName, descriptor);
     }
+
+    return procId;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hbase/blob/9e131dfa/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java
index b3b1e64..d93ca94 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java
@@ -129,7 +129,7 @@ public interface MasterServices extends Server {
    * @param descriptor The updated table descriptor
    * @throws IOException
    */
-  void modifyTable(final TableName tableName, final HTableDescriptor descriptor)
+  long modifyTable(final TableName tableName, final HTableDescriptor descriptor)
       throws IOException;
 
   /**

http://git-wip-us.apache.org/repos/asf/hbase/blob/9e131dfa/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java
index e34db29..52bfe65 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java
@@ -438,8 +438,10 @@ public class TestCatalogJanitor {
 
 
     @Override
-    public void modifyTable(TableName tableName, HTableDescriptor descriptor)
-        throws IOException { }
+    public long modifyTable(TableName tableName, HTableDescriptor descriptor)
+        throws IOException {
+      return -1;
+    }
 
     @Override
     public long enableTable(TableName tableName) throws IOException {


Mime
View raw message