You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2012/04/23 20:12:18 UTC
svn commit: r1329358 [2/5] - in /hbase/trunk:
security/src/main/java/org/apache/hadoop/hbase/ipc/
src/main/java/org/apache/hadoop/hbase/catalog/
src/main/java/org/apache/hadoop/hbase/client/
src/main/java/org/apache/hadoop/hbase/ipc/ src/main/java/org/...
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java?rev=1329358&r1=1329357&r2=1329358&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java Mon Apr 23 18:12:16 2012
@@ -24,10 +24,12 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.NavigableMap;
import java.util.NavigableSet;
+import java.util.UUID;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.DoNotRetryIOException;
+import org.apache.hadoop.hbase.HRegionInfo;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Action;
import org.apache.hadoop.hbase.client.Append;
@@ -42,6 +44,23 @@ import org.apache.hadoop.hbase.client.Sc
import org.apache.hadoop.hbase.client.coprocessor.Exec;
import org.apache.hadoop.hbase.filter.WritableByteArrayComparable;
import org.apache.hadoop.hbase.io.TimeRange;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry.WALEdit.ScopeType;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry.WALKey;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry.WALEdit.FamilyScope;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;
@@ -65,6 +84,9 @@ import org.apache.hadoop.hbase.protobuf.
import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameStringPair;
import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;
import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;
+import org.apache.hadoop.hbase.regionserver.wal.HLog;
+import org.apache.hadoop.hbase.regionserver.wal.HLogKey;
+import org.apache.hadoop.hbase.regionserver.wal.WALEdit;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.Pair;
@@ -90,16 +112,15 @@ public final class RequestConverter {
* @param regionName the name of the region to get
* @param row the row to get
* @param family the column family to get
- * @param closestRowBefore if the requested row doesn't exist,
* should return the immediate row before
* @return a protocol buffer GetReuqest
*/
- public static GetRequest buildGetRequest(final byte[] regionName,
- final byte[] row, final byte[] family, boolean closestRowBefore) {
+ public static GetRequest buildGetRowOrBeforeRequest(
+ final byte[] regionName, final byte[] row, final byte[] family) {
GetRequest.Builder builder = GetRequest.newBuilder();
RegionSpecifier region = buildRegionSpecifier(
RegionSpecifierType.REGION_NAME, regionName);
- builder.setClosestRowBefore(closestRowBefore);
+ builder.setClosestRowBefore(true);
builder.setRegion(region);
Column.Builder columnBuilder = Column.newBuilder();
@@ -542,6 +563,294 @@ public final class RequestConverter {
}
// End utilities for Client
+//Start utilities for Admin
+
+ /**
+ * Create a protocol buffer GetRegionInfoRequest for a given region name
+ *
+ * @param regionName the name of the region to get info
+ * @return a protocol buffer GetRegionInfoRequest
+ */
+ public static GetRegionInfoRequest
+ buildGetRegionInfoRequest(final byte[] regionName) {
+ GetRegionInfoRequest.Builder builder = GetRegionInfoRequest.newBuilder();
+ RegionSpecifier region = buildRegionSpecifier(
+ RegionSpecifierType.REGION_NAME, regionName);
+ builder.setRegion(region);
+ return builder.build();
+ }
+
+ /**
+ * Create a protocol buffer GetStoreFileRequest for a given region name
+ *
+ * @param regionName the name of the region to get info
+ * @param family the family to get store file list
+ * @return a protocol buffer GetStoreFileRequest
+ */
+ public static GetStoreFileRequest
+ buildGetStoreFileRequest(final byte[] regionName, final byte[] family) {
+ GetStoreFileRequest.Builder builder = GetStoreFileRequest.newBuilder();
+ RegionSpecifier region = buildRegionSpecifier(
+ RegionSpecifierType.REGION_NAME, regionName);
+ builder.setRegion(region);
+ builder.addFamily(ByteString.copyFrom(family));
+ return builder.build();
+ }
+
+ /**
+ * Create a protocol buffer GetOnlineRegionRequest
+ *
+ * @return a protocol buffer GetOnlineRegionRequest
+ */
+ public static GetOnlineRegionRequest buildGetOnlineRegionRequest() {
+ return GetOnlineRegionRequest.newBuilder().build();
+ }
+
+ /**
+ * Create a protocol buffer FlushRegionRequest for a given region name
+ *
+ * @param regionName the name of the region to get info
+ * @return a protocol buffer FlushRegionRequest
+ */
+ public static FlushRegionRequest
+ buildFlushRegionRequest(final byte[] regionName) {
+ FlushRegionRequest.Builder builder = FlushRegionRequest.newBuilder();
+ RegionSpecifier region = buildRegionSpecifier(
+ RegionSpecifierType.REGION_NAME, regionName);
+ builder.setRegion(region);
+ return builder.build();
+ }
+
+ /**
+ * Create a protocol buffer OpenRegionRequest to open a list of regions
+ *
+ * @param regions the list of regions to open
+ * @return a protocol buffer OpenRegionRequest
+ */
+ public static OpenRegionRequest
+ buildOpenRegionRequest(final List<HRegionInfo> regions) {
+ OpenRegionRequest.Builder builder = OpenRegionRequest.newBuilder();
+ for (HRegionInfo region: regions) {
+ builder.addRegion(ProtobufUtil.toRegionInfo(region));
+ }
+ return builder.build();
+ }
+
+ /**
+ * Create a protocol buffer OpenRegionRequest for a given region
+ *
+ * @param region the region to open
+ * @return a protocol buffer OpenRegionRequest
+ */
+ public static OpenRegionRequest
+ buildOpenRegionRequest(final HRegionInfo region) {
+ return buildOpenRegionRequest(region, -1);
+ }
+
+ /**
+ * Create a protocol buffer OpenRegionRequest for a given region
+ *
+ * @param region the region to open
+ * @param versionOfOfflineNode that needs to be present in the offline node
+ * @return a protocol buffer OpenRegionRequest
+ */
+ public static OpenRegionRequest buildOpenRegionRequest(
+ final HRegionInfo region, final int versionOfOfflineNode) {
+ OpenRegionRequest.Builder builder = OpenRegionRequest.newBuilder();
+ builder.addRegion(ProtobufUtil.toRegionInfo(region));
+ if (versionOfOfflineNode >= 0) {
+ builder.setVersionOfOfflineNode(versionOfOfflineNode);
+ }
+ return builder.build();
+ }
+
+ /**
+ * Create a CloseRegionRequest for a given region name
+ *
+ * @param regionName the name of the region to close
+ * @param transitionInZK indicator if to transition in ZK
+ * @return a CloseRegionRequest
+ */
+ public static CloseRegionRequest buildCloseRegionRequest(
+ final byte[] regionName, final boolean transitionInZK) {
+ CloseRegionRequest.Builder builder = CloseRegionRequest.newBuilder();
+ RegionSpecifier region = buildRegionSpecifier(
+ RegionSpecifierType.REGION_NAME, regionName);
+ builder.setRegion(region);
+ builder.setTransitionInZK(transitionInZK);
+ return builder.build();
+ }
+
+ /**
+ * Create a CloseRegionRequest for a given region name
+ *
+ * @param regionName the name of the region to close
+ * @param versionOfClosingNode
+ * the version of znode to compare when RS transitions the znode from
+ * CLOSING state.
+ * @return a CloseRegionRequest
+ */
+ public static CloseRegionRequest buildCloseRegionRequest(
+ final byte[] regionName, final int versionOfClosingNode) {
+ CloseRegionRequest.Builder builder = CloseRegionRequest.newBuilder();
+ RegionSpecifier region = buildRegionSpecifier(
+ RegionSpecifierType.REGION_NAME, regionName);
+ builder.setRegion(region);
+ builder.setVersionOfClosingNode(versionOfClosingNode);
+ return builder.build();
+ }
+
+ /**
+ * Create a CloseRegionRequest for a given encoded region name
+ *
+ * @param encodedRegionName the name of the region to close
+ * @param transitionInZK indicator if to transition in ZK
+ * @return a CloseRegionRequest
+ */
+ public static CloseRegionRequest
+ buildCloseRegionRequest(final String encodedRegionName,
+ final boolean transitionInZK) {
+ CloseRegionRequest.Builder builder = CloseRegionRequest.newBuilder();
+ RegionSpecifier region = buildRegionSpecifier(
+ RegionSpecifierType.ENCODED_REGION_NAME,
+ Bytes.toBytes(encodedRegionName));
+ builder.setRegion(region);
+ builder.setTransitionInZK(transitionInZK);
+ return builder.build();
+ }
+
+ /**
+ * Create a SplitRegionRequest for a given region name
+ *
+ * @param regionName the name of the region to split
+ * @param splitPoint the split point
+ * @return a SplitRegionRequest
+ */
+ public static SplitRegionRequest buildSplitRegionRequest(
+ final byte[] regionName, final byte[] splitPoint) {
+ SplitRegionRequest.Builder builder = SplitRegionRequest.newBuilder();
+ RegionSpecifier region = buildRegionSpecifier(
+ RegionSpecifierType.REGION_NAME, regionName);
+ builder.setRegion(region);
+ if (splitPoint != null) {
+ builder.setSplitPoint(ByteString.copyFrom(splitPoint));
+ }
+ return builder.build();
+ }
+
+ /**
+ * Create a CompactRegionRequest for a given region name
+ *
+ * @param regionName the name of the region to get info
+ * @param major indicator if it is a major compaction
+ * @return a CompactRegionRequest
+ */
+ public static CompactRegionRequest buildCompactRegionRequest(
+ final byte[] regionName, final boolean major) {
+ CompactRegionRequest.Builder builder = CompactRegionRequest.newBuilder();
+ RegionSpecifier region = buildRegionSpecifier(
+ RegionSpecifierType.REGION_NAME, regionName);
+ builder.setRegion(region);
+ builder.setMajor(major);
+ return builder.build();
+ }
+
+ /**
+ * Create a new ReplicateWALEntryRequest from a list of HLog entries
+ *
+ * @param entries the HLog entries to be replicated
+ * @return a ReplicateWALEntryRequest
+ */
+ public static ReplicateWALEntryRequest
+ buildReplicateWALEntryRequest(final HLog.Entry[] entries) {
+ FamilyScope.Builder scopeBuilder = FamilyScope.newBuilder();
+ WALEntry.Builder entryBuilder = WALEntry.newBuilder();
+ ReplicateWALEntryRequest.Builder builder =
+ ReplicateWALEntryRequest.newBuilder();
+ for (HLog.Entry entry: entries) {
+ entryBuilder.clear();
+ WALKey.Builder keyBuilder = entryBuilder.getKeyBuilder();
+ HLogKey key = entry.getKey();
+ keyBuilder.setEncodedRegionName(
+ ByteString.copyFrom(key.getEncodedRegionName()));
+ keyBuilder.setTableName(ByteString.copyFrom(key.getTablename()));
+ keyBuilder.setLogSequenceNumber(key.getLogSeqNum());
+ keyBuilder.setWriteTime(key.getWriteTime());
+ UUID clusterId = key.getClusterId();
+ if (clusterId != null) {
+ AdminProtos.UUID.Builder uuidBuilder = keyBuilder.getClusterIdBuilder();
+ uuidBuilder.setLeastSigBits(clusterId.getLeastSignificantBits());
+ uuidBuilder.setMostSigBits(clusterId.getMostSignificantBits());
+ }
+ WALEdit edit = entry.getEdit();
+ WALEntry.WALEdit.Builder editBuilder = entryBuilder.getEditBuilder();
+ NavigableMap<byte[], Integer> scopes = edit.getScopes();
+ if (scopes != null && !scopes.isEmpty()) {
+ for (Map.Entry<byte[], Integer> scope: scopes.entrySet()) {
+ scopeBuilder.setFamily(ByteString.copyFrom(scope.getKey()));
+ ScopeType scopeType = ScopeType.valueOf(scope.getValue().intValue());
+ scopeBuilder.setScopeType(scopeType);
+ editBuilder.addFamilyScope(scopeBuilder.build());
+ }
+ }
+ List<KeyValue> keyValues = edit.getKeyValues();
+ for (KeyValue value: keyValues) {
+ editBuilder.addKeyValueBytes(ByteString.copyFrom(
+ value.getBuffer(), value.getOffset(), value.getLength()));
+ }
+ builder.addEntry(entryBuilder.build());
+ }
+ return builder.build();
+ }
+
+ /**
+ * Create a new RollWALWriterRequest
+ *
+ * @return a ReplicateWALEntryRequest
+ */
+ public static RollWALWriterRequest buildRollWALWriterRequest() {
+ RollWALWriterRequest.Builder builder = RollWALWriterRequest.newBuilder();
+ return builder.build();
+ }
+
+ /**
+ * Create a new GetServerInfoRequest
+ *
+ * @return a GetServerInfoRequest
+ */
+ public static GetServerInfoRequest buildGetServerInfoRequest() {
+ GetServerInfoRequest.Builder builder = GetServerInfoRequest.newBuilder();
+ return builder.build();
+ }
+
+ /**
+ * Create a new StopServerRequest
+ *
+ * @param reason the reason to stop the server
+ * @return a StopServerRequest
+ */
+ public static StopServerRequest buildStopServerRequest(final String reason) {
+ StopServerRequest.Builder builder = StopServerRequest.newBuilder();
+ builder.setReason(reason);
+ return builder.build();
+ }
+
+//End utilities for Admin
+
+ /**
+ * Convert a byte array to a protocol buffer RegionSpecifier
+ *
+ * @param type the region specifier type
+ * @param value the region specifier byte array value
+ * @return a protocol buffer RegionSpecifier
+ */
+ public static RegionSpecifier buildRegionSpecifier(
+ final RegionSpecifierType type, final byte[] value) {
+ RegionSpecifier.Builder regionBuilder = RegionSpecifier.newBuilder();
+ regionBuilder.setValue(ByteString.copyFrom(value));
+ regionBuilder.setType(type);
+ return regionBuilder.build();
+ }
/**
* Create a protocol buffer Condition
@@ -745,21 +1054,6 @@ public final class RequestConverter {
}
/**
- * Convert a byte array to a protocol buffer RegionSpecifier
- *
- * @param type the region specifier type
- * @param value the region specifier byte array value
- * @return a protocol buffer RegionSpecifier
- */
- private static RegionSpecifier buildRegionSpecifier(
- final RegionSpecifierType type, final byte[] value) {
- RegionSpecifier.Builder regionBuilder = RegionSpecifier.newBuilder();
- regionBuilder.setValue(ByteString.copyFrom(value));
- regionBuilder.setType(type);
- return regionBuilder.build();
- }
-
- /**
* Convert a delete KeyValue type to protocol buffer DeleteType.
*
* @param type
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/protobuf/ResponseConverter.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/protobuf/ResponseConverter.java?rev=1329358&r1=1329357&r2=1329358&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/protobuf/ResponseConverter.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/protobuf/ResponseConverter.java Mon Apr 23 18:12:16 2012
@@ -24,16 +24,15 @@ import java.util.List;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.hbase.HRegionInfo;
import org.apache.hadoop.hbase.client.Result;
-import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameBytesPair;
-import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse;
-import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ActionResult;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;
+import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameBytesPair;
+import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo;
import org.apache.hadoop.hbase.regionserver.RegionOpeningState;
import org.apache.hadoop.util.StringUtils;
@@ -147,18 +146,6 @@ public final class ResponseConverter {
}
/**
- * Get the region info from a GetRegionInfoResponse
- *
- * @param proto the GetRegionInfoResponse
- * @return the region info
- */
- public static HRegionInfo getRegionInfo
- (final GetRegionInfoResponse proto) {
- if (proto == null || proto.getRegionInfo() == null) return null;
- return ProtobufUtil.toRegionInfo(proto.getRegionInfo());
- }
-
- /**
* Get the region opening state from a OpenRegionResponse
*
* @param proto the OpenRegionResponse