http://git-wip-us.apache.org/repos/asf/hbase/blob/8725526d/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 37f726c..c30d92a 100644 --- a/hbase-protocol/src/main/protobuf/Master.proto +++ b/hbase-protocol/src/main/protobuf/Master.proto @@ -28,6 +28,7 @@ option optimize_for = SPEED; import "HBase.proto"; import "Client.proto"; import "ClusterStatus.proto"; +import "ErrorHandling.proto"; import "Quota.proto"; /* Column-level protobufs */ @@ -108,6 +109,7 @@ message CreateTableRequest { } message CreateTableResponse { + optional uint64 proc_id = 1; } message DeleteTableRequest { @@ -115,6 +117,7 @@ message DeleteTableRequest { } message DeleteTableResponse { + optional uint64 proc_id = 1; } message TruncateTableRequest { @@ -380,6 +383,24 @@ message IsProcedureDoneResponse { optional ProcedureDescription snapshot = 2; } +message GetProcedureResultRequest { + required uint64 proc_id = 1; +} + +message GetProcedureResultResponse { + enum State { + NOT_FOUND = 0; + RUNNING = 1; + FINISHED = 2; + } + + required State state = 1; + optional uint64 start_time = 2; + optional uint64 last_update = 3; + optional bytes result = 4; + optional ForeignExceptionMessage exception = 5; +} + message SetQuotaRequest { optional string user_name = 1; optional string user_group = 2; @@ -634,4 +655,7 @@ service MasterService { /** Returns the timestamp of the last major compaction */ rpc getLastMajorCompactionTimestampForRegion(MajorCompactionTimestampForRegionRequest) returns(MajorCompactionTimestampResponse); + + rpc getProcedureResult(GetProcedureResultRequest) + returns(GetProcedureResultResponse); }
http://git-wip-us.apache.org/repos/asf/hbase/blob/8725526d/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 8ec883a..e2e600c 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 @@ -1326,7 +1326,7 @@ public class HMaster extends HRegionServer implements MasterServices, Server { } @Override - public void createTable(HTableDescriptor hTableDescriptor, + public long createTable(HTableDescriptor hTableDescriptor, byte [][] splitKeys) throws IOException { if (isStopped()) { throw new MasterNotRunningException(); @@ -1357,9 +1357,7 @@ public class HMaster extends HRegionServer implements MasterServices, Server { cpHost.postCreateTable(hTableDescriptor, newRegions); } - // TODO: change the interface to return the procId, - // and add it to the response protobuf. - //return procId; + return procId; } /** @@ -1571,7 +1569,7 @@ public class HMaster extends HRegionServer implements MasterServices, Server { } @Override - public void deleteTable(final TableName tableName) throws IOException { + public long deleteTable(final TableName tableName) throws IOException { checkInitialized(); if (cpHost != null) { cpHost.preDeleteTable(tableName); @@ -1588,9 +1586,7 @@ public class HMaster extends HRegionServer implements MasterServices, Server { cpHost.postDeleteTable(tableName); } - // TODO: change the interface to return the procId, - // and add it to the response protobuf. - //return procId; + return procId; } @Override http://git-wip-us.apache.org/repos/asf/hbase/blob/8725526d/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java index 07b2da2..abdbf5a 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java @@ -43,6 +43,8 @@ import org.apache.hadoop.hbase.exceptions.UnknownProtocolException; import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface; import org.apache.hadoop.hbase.ipc.ServerRpcController; import org.apache.hadoop.hbase.procedure.MasterProcedureManager; +import org.apache.hadoop.hbase.procedure2.Procedure; +import org.apache.hadoop.hbase.procedure2.ProcedureResult; import org.apache.hadoop.hbase.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.protobuf.RequestConverter; import org.apache.hadoop.hbase.protobuf.ResponseConverter; @@ -86,6 +88,8 @@ import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetCompletedSnaps import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetCompletedSnapshotsResponse; import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetNamespaceDescriptorRequest; import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetNamespaceDescriptorResponse; +import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetProcedureResultRequest; +import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetProcedureResultResponse; import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetSchemaAlterStatusRequest; import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetSchemaAlterStatusResponse; import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetTableDescriptorsRequest; @@ -158,6 +162,7 @@ import org.apache.hadoop.hbase.regionserver.RSRpcServices; import org.apache.hadoop.hbase.snapshot.ClientSnapshotDescriptionUtils; import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils; import org.apache.hadoop.hbase.util.Bytes; +import org.apache.hadoop.hbase.util.ByteStringer; import org.apache.hadoop.hbase.util.Pair; import org.apache.zookeeper.KeeperException; @@ -405,11 +410,11 @@ public class MasterRpcServices extends RSRpcServices HTableDescriptor hTableDescriptor = HTableDescriptor.convert(req.getTableSchema()); byte [][] splitKeys = ProtobufUtil.getSplitKeysArray(req); try { - master.createTable(hTableDescriptor, splitKeys); + long procId = master.createTable(hTableDescriptor, splitKeys); + return CreateTableResponse.newBuilder().setProcId(procId).build(); } catch (IOException ioe) { throw new ServiceException(ioe); } - return CreateTableResponse.newBuilder().build(); } @Override @@ -461,11 +466,11 @@ public class MasterRpcServices extends RSRpcServices public DeleteTableResponse deleteTable(RpcController controller, DeleteTableRequest request) throws ServiceException { try { - master.deleteTable(ProtobufUtil.toTableName(request.getTableName())); + long procId = master.deleteTable(ProtobufUtil.toTableName(request.getTableName())); + return DeleteTableResponse.newBuilder().setProcId(procId).build(); } catch (IOException ioe) { throw new ServiceException(ioe); } - return DeleteTableResponse.newBuilder().build(); } @Override @@ -962,6 +967,44 @@ public class MasterRpcServices extends RSRpcServices } @Override + public GetProcedureResultResponse getProcedureResult(RpcController controller, + GetProcedureResultRequest request) throws ServiceException { + LOG.debug("Checking to see if procedure is done procId=" + request.getProcId()); + try { + master.checkInitialized(); + GetProcedureResultResponse.Builder builder = GetProcedureResultResponse.newBuilder(); + + Pair<ProcedureResult, Procedure> v = master.getMasterProcedureExecutor() + .getResultOrProcedure(request.getProcId()); + if (v.getFirst() != null) { + ProcedureResult result = v.getFirst(); + builder.setState(GetProcedureResultResponse.State.FINISHED); + builder.setStartTime(result.getStartTime()); + builder.setLastUpdate(result.getLastUpdate()); + if (result.isFailed()) { + builder.setException(result.getException().convert()); + } + if (result.hasResultData()) { + builder.setResult(ByteStringer.wrap(result.getResult())); + } + master.getMasterProcedureExecutor().removeResult(request.getProcId()); + } else { + Procedure proc = v.getSecond(); + if (proc == null) { + builder.setState(GetProcedureResultResponse.State.NOT_FOUND); + } else { + builder.setState(GetProcedureResultResponse.State.RUNNING); + builder.setStartTime(proc.getStartTime()); + builder.setLastUpdate(proc.getLastUpdate()); + } + } + return builder.build(); + } catch (IOException e) { + throw new ServiceException(e); + } + } + + @Override public ListNamespaceDescriptorsResponse listNamespaceDescriptors(RpcController c, ListNamespaceDescriptorsRequest request) throws ServiceException { try { http://git-wip-us.apache.org/repos/asf/hbase/blob/8725526d/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 7352fe8..d823b35 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 @@ -105,7 +105,7 @@ public interface MasterServices extends Server { * @param splitKeys Starting row keys for the initial table regions. If null * a single region is created. */ - void createTable(HTableDescriptor desc, byte[][] splitKeys) + long createTable(HTableDescriptor desc, byte[][] splitKeys) throws IOException; /** @@ -113,7 +113,7 @@ public interface MasterServices extends Server { * @param tableName The table name * @throws IOException */ - void deleteTable(final TableName tableName) throws IOException; + long deleteTable(final TableName tableName) throws IOException; /** * Truncate a table http://git-wip-us.apache.org/repos/asf/hbase/blob/8725526d/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 2c13f39..5b2e50d 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 @@ -227,9 +227,10 @@ public class TestCatalogJanitor { } @Override - public void createTable(HTableDescriptor desc, byte[][] splitKeys) + public long createTable(HTableDescriptor desc, byte[][] splitKeys) throws IOException { // no-op + return -1; } @Override @@ -427,7 +428,9 @@ public class TestCatalogJanitor { } @Override - public void deleteTable(TableName tableName) throws IOException { } + public long deleteTable(TableName tableName) throws IOException { + return -1; + } @Override public void truncateTable(TableName tableName, boolean preserveSplits) throws IOException { }
