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 b20568e717a..f00d6c918b3 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 modifyTable(final TableName tableName, final HTableDescriptor htd) throws IOException; /** 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 c0de45b3350..7047714ba51 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 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(getConnection()) { + ModifyTableResponse response = executeCallable( + new MasterCallable(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 { + 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) @@ -4261,10 +4292,33 @@ public class HBaseAdmin implements Admin { return getAdmin().getTableDescriptorByTableName(getTableName()); } + /** + * @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"); - } - }); - } } } 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 f660bdde9ed..a762d007c47 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; + /** + * optional uint64 proc_id = 1; + */ + boolean hasProcId(); + /** + * optional uint64 proc_id = 1; + */ + 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_; + /** + * optional uint64 proc_id = 1; + */ + public boolean hasProcId() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional uint64 proc_id = 1; + */ + 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_ ; + /** + * optional uint64 proc_id = 1; + */ + public boolean hasProcId() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional uint64 proc_id = 1; + */ + public long getProcId() { + return procId_; + } + /** + * optional uint64 proc_id = 1; + */ + public Builder setProcId(long value) { + bitField0_ |= 0x00000001; + procId_ = value; + onChanged(); + return this; + } + /** + * optional uint64 proc_id = 1; + */ + 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 diff --git a/hbase-protocol/src/main/protobuf/Master.proto b/hbase-protocol/src/main/protobuf/Master.proto index ce2b9408901..990eb5b99e2 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 */ 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 a39b3eaae43..ced66995513 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 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 b3b1e6408ba..d93ca94f300 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; /** 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 e34db292023..52bfe65b79a 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 {