You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mb...@apache.org on 2015/04/15 12:54:59 UTC
[11/27] hbase git commit: HBASE-13204 Procedure v2 - client
create/delete table sync
http://git-wip-us.apache.org/repos/asf/hbase/blob/67149d25/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 e2814e7..22ad882 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 {
@@ -372,6 +375,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;
@@ -622,4 +643,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/67149d25/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 5c491bf..df1454d 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
@@ -1360,7 +1360,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();
@@ -1391,9 +1391,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;
}
/**
@@ -1604,7 +1602,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);
@@ -1621,9 +1619,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/67149d25/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 e3e4099..8cd22a9 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
@@ -42,6 +42,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;
@@ -85,6 +87,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;
@@ -157,6 +161,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;
@@ -404,11 +409,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
@@ -460,11 +465,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
@@ -944,6 +949,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/67149d25/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 bd4572b..3166a23 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
@@ -100,7 +100,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;
/**
@@ -108,7 +108,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/67149d25/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.java
index f29b0a6..89f0969 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.java
@@ -125,6 +125,7 @@ public class DeleteTableProcedure
LOG.debug("delete '" + getTableName() + "' from filesystem");
DeleteTableProcedure.deleteFromFs(env, getTableName(), regions, true);
setNextState(DeleteTableState.DELETE_TABLE_UPDATE_DESC_CACHE);
+ regions = null;
break;
case DELETE_TABLE_UPDATE_DESC_CACHE:
LOG.debug("delete '" + getTableName() + "' descriptor");
http://git-wip-us.apache.org/repos/asf/hbase/blob/67149d25/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 37b20b0..d3c1e0e 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
@@ -224,9 +224,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
@@ -408,7 +409,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 { }
http://git-wip-us.apache.org/repos/asf/hbase/blob/67149d25/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java
index f9d0552..9c654e2 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java
@@ -172,6 +172,7 @@ public class TestHBaseFsck {
conf.setInt("hbase.hconnection.threads.max", 2 * POOL_SIZE);
conf.setInt("hbase.hconnection.threads.core", POOL_SIZE);
conf.setInt("hbase.hbck.close.timeout", 2 * REGION_ONLINE_TIMEOUT);
+ conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, 8 * REGION_ONLINE_TIMEOUT);
TEST_UTIL.startMiniCluster(3);
tableExecutorService = new ThreadPoolExecutor(1, POOL_SIZE, 60, TimeUnit.SECONDS,