You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2014/04/23 02:03:06 UTC
svn commit: r1589318 - in /hbase/trunk/hbase-server/src:
main/java/org/apache/hadoop/hbase/rest/
main/java/org/apache/hadoop/hbase/rest/model/
main/java/org/apache/hadoop/hbase/rest/protobuf/generated/
main/resources/org/apache/hadoop/hbase/rest/ main/...
Author: apurtell
Date: Wed Apr 23 00:03:06 2014
New Revision: 1589318
URL: http://svn.apache.org/r1589318
Log:
HBASE-10952 [REST] Let the user turn off block caching if desired
Modified:
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/Constants.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/MultiRowResource.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ResultGenerator.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/RowResource.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/RowResultGenerator.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResource.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResultGenerator.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/protobuf/generated/ScannerMessage.java
hbase/trunk/hbase-server/src/main/resources/org/apache/hadoop/hbase/rest/XMLSchema.xsd
hbase/trunk/hbase-server/src/main/resources/org/apache/hadoop/hbase/rest/protobuf/ScannerMessage.proto
hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/rest/model/TestModelBase.java
hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/rest/model/TestScannerModel.java
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/Constants.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/Constants.java?rev=1589318&r1=1589317&r2=1589318&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/Constants.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/Constants.java Wed Apr 23 00:03:06 2014
@@ -27,7 +27,9 @@ import org.apache.hadoop.classification.
@InterfaceAudience.Public
@InterfaceStability.Stable
public interface Constants {
- String VERSION_STRING = "0.0.2";
+ // All constants in a public interface are 'public static final'
+
+ String VERSION_STRING = "0.0.3";
int DEFAULT_MAX_AGE = 60 * 60 * 4; // 4 hours
@@ -43,30 +45,32 @@ public interface Constants {
String CRLF = "\r\n";
- static final String REST_KEYTAB_FILE = "hbase.rest.keytab.file";
- static final String REST_KERBEROS_PRINCIPAL = "hbase.rest.kerberos.principal";
- static final String REST_AUTHENTICATION_TYPE = "hbase.rest.authentication.type";
- static final String REST_AUTHENTICATION_PRINCIPAL =
- "hbase.rest.authentication.kerberos.principal";
-
- static final String REST_SSL_ENABLED = "hbase.rest.ssl.enabled";
- static final String REST_SSL_KEYSTORE_STORE = "hbase.rest.ssl.keystore.store";
- static final String REST_SSL_KEYSTORE_PASSWORD = "hbase.rest.ssl.keystore.password";
- static final String REST_SSL_KEYSTORE_KEYPASSWORD =
- "hbase.rest.ssl.keystore.keypassword";
-
- static final String REST_DNS_NAMESERVER = "hbase.rest.dns.nameserver";
- static final String REST_DNS_INTERFACE = "hbase.rest.dns.interface";
-
- public static final String FILTER_CLASSES = "hbase.rest.filter.classes";
- public static final String SCAN_START_ROW = "startrow";
- public static final String SCAN_END_ROW = "endrow";
- public static final String SCAN_COLUMN = "column";
- public static final String SCAN_START_TIME = "starttime";
- public static final String SCAN_END_TIME = "endtime";
- public static final String SCAN_MAX_VERSIONS = "maxversions";
- public static final String SCAN_BATCH_SIZE = "batchsize";
- public static final String SCAN_LIMIT = "limit";
- public static final String SCAN_FETCH_SIZE = "hbase.rest.scan.fetchsize";
-
+ String REST_KEYTAB_FILE = "hbase.rest.keytab.file";
+ String REST_KERBEROS_PRINCIPAL = "hbase.rest.kerberos.principal";
+ String REST_AUTHENTICATION_TYPE = "hbase.rest.authentication.type";
+ String REST_AUTHENTICATION_PRINCIPAL = "hbase.rest.authentication.kerberos.principal";
+
+ String REST_SSL_ENABLED = "hbase.rest.ssl.enabled";
+ String REST_SSL_KEYSTORE_STORE = "hbase.rest.ssl.keystore.store";
+ String REST_SSL_KEYSTORE_PASSWORD = "hbase.rest.ssl.keystore.password";
+ String REST_SSL_KEYSTORE_KEYPASSWORD = "hbase.rest.ssl.keystore.keypassword";
+
+ String REST_DNS_NAMESERVER = "hbase.rest.dns.nameserver";
+ String REST_DNS_INTERFACE = "hbase.rest.dns.interface";
+
+ String FILTER_CLASSES = "hbase.rest.filter.classes";
+ String SCAN_START_ROW = "startrow";
+ String SCAN_END_ROW = "endrow";
+ String SCAN_COLUMN = "column";
+ String SCAN_START_TIME = "starttime";
+ String SCAN_END_TIME = "endtime";
+ String SCAN_MAX_VERSIONS = "maxversions";
+ String SCAN_BATCH_SIZE = "batchsize";
+ String SCAN_LIMIT = "limit";
+ String SCAN_FETCH_SIZE = "hbase.rest.scan.fetchsize";
+
+ String ROW_KEYS_PARAM_NAME = "row";
+ /** If this query parameter is present when processing row or scanner resources,
+ it disables server side block caching */
+ String NOCACHE_PARAM_NAME = "nocache";
}
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/MultiRowResource.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/MultiRowResource.java?rev=1589318&r1=1589317&r2=1589318&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/MultiRowResource.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/MultiRowResource.java Wed Apr 23 00:03:06 2014
@@ -37,9 +37,8 @@ import org.apache.hadoop.hbase.rest.mode
import org.apache.hadoop.hbase.rest.model.RowModel;
@InterfaceAudience.Private
-public class MultiRowResource extends ResourceBase {
+public class MultiRowResource extends ResourceBase implements Constants {
private static final Log LOG = LogFactory.getLog(MultiRowResource.class);
- public static final String ROW_KEYS_PARAM_NAME = "row";
TableResource tableResource;
Integer versions = null;
@@ -75,9 +74,9 @@ public class MultiRowResource extends Re
if (this.versions != null) {
rowSpec.setMaxVersions(this.versions);
}
-
ResultGenerator generator =
- ResultGenerator.fromRowSpec(this.tableResource.getName(), rowSpec, null);
+ ResultGenerator.fromRowSpec(this.tableResource.getName(), rowSpec, null,
+ !params.containsKey(NOCACHE_PARAM_NAME));
Cell value = null;
RowModel rowModel = new RowModel(rk);
if (generator.hasNext()) {
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ResultGenerator.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ResultGenerator.java?rev=1589318&r1=1589317&r2=1589318&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ResultGenerator.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ResultGenerator.java Wed Apr 23 00:03:06 2014
@@ -31,11 +31,12 @@ import org.apache.hadoop.hbase.rest.mode
public abstract class ResultGenerator implements Iterator<Cell> {
public static ResultGenerator fromRowSpec(final String table,
- final RowSpec rowspec, final Filter filter) throws IOException {
+ final RowSpec rowspec, final Filter filter, final boolean cacheBlocks)
+ throws IOException {
if (rowspec.isSingleRow()) {
- return new RowResultGenerator(table, rowspec, filter);
+ return new RowResultGenerator(table, rowspec, filter, cacheBlocks);
} else {
- return new ScannerResultGenerator(table, rowspec, filter);
+ return new ScannerResultGenerator(table, rowspec, filter, cacheBlocks);
}
}
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/RowResource.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/RowResource.java?rev=1589318&r1=1589317&r2=1589318&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/RowResource.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/RowResource.java Wed Apr 23 00:03:06 2014
@@ -31,6 +31,7 @@ import javax.ws.rs.PUT;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.UriInfo;
@@ -88,9 +89,11 @@ public class RowResource extends Resourc
LOG.debug("GET " + uriInfo.getAbsolutePath());
}
servlet.getMetrics().incrementRequests(1);
+ MultivaluedMap<String, String> params = uriInfo.getQueryParameters();
try {
ResultGenerator generator =
- ResultGenerator.fromRowSpec(tableResource.getName(), rowspec, null);
+ ResultGenerator.fromRowSpec(tableResource.getName(), rowspec, null,
+ !params.containsKey(NOCACHE_PARAM_NAME));
if (!generator.hasNext()) {
servlet.getMetrics().incrementFailedGetRequests(1);
return Response.status(Response.Status.NOT_FOUND)
@@ -138,9 +141,11 @@ public class RowResource extends Resourc
return Response.status(Response.Status.BAD_REQUEST).type(MIMETYPE_TEXT)
.entity("Bad request: Either 0 or more than 1 columns specified." + CRLF).build();
}
+ MultivaluedMap<String, String> params = uriInfo.getQueryParameters();
try {
ResultGenerator generator =
- ResultGenerator.fromRowSpec(tableResource.getName(), rowspec, null);
+ ResultGenerator.fromRowSpec(tableResource.getName(), rowspec, null,
+ !params.containsKey(NOCACHE_PARAM_NAME));
if (!generator.hasNext()) {
servlet.getMetrics().incrementFailedGetRequests(1);
return Response.status(Response.Status.NOT_FOUND)
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/RowResultGenerator.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/RowResultGenerator.java?rev=1589318&r1=1589317&r2=1589318&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/RowResultGenerator.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/RowResultGenerator.java Wed Apr 23 00:03:06 2014
@@ -43,7 +43,8 @@ public class RowResultGenerator extends
private Cell cache;
public RowResultGenerator(final String tableName, final RowSpec rowspec,
- final Filter filter) throws IllegalArgumentException, IOException {
+ final Filter filter, final boolean cacheBlocks)
+ throws IllegalArgumentException, IOException {
HTableInterface table = RESTServlet.getInstance().getTable(tableName);
try {
Get get = new Get(rowspec.getRow());
@@ -64,6 +65,7 @@ public class RowResultGenerator extends
if (filter != null) {
get.setFilter(filter);
}
+ get.setCacheBlocks(cacheBlocks);
Result result = table.get(get);
if (result != null && !result.isEmpty()) {
valuesI = result.listCells().iterator();
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResource.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResource.java?rev=1589318&r1=1589317&r2=1589318&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResource.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResource.java Wed Apr 23 00:03:06 2014
@@ -31,6 +31,7 @@ import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;
@@ -90,11 +91,14 @@ public class ScannerResource extends Res
spec = new RowSpec(model.getStartRow(), endRow, model.getColumns(), model.getStartTime(),
model.getEndTime(), model.getMaxVersions());
}
+ MultivaluedMap<String, String> params = uriInfo.getQueryParameters();
+
try {
Filter filter = ScannerResultGenerator.buildFilterFromModel(model);
String tableName = tableResource.getName();
ScannerResultGenerator gen =
- new ScannerResultGenerator(tableName, spec, filter, model.getCaching());
+ new ScannerResultGenerator(tableName, spec, filter, model.getCaching(),
+ model.getCacheBlocks());
String id = gen.getID();
ScannerInstanceResource instance =
new ScannerInstanceResource(tableName, id, gen, model.getBatch());
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResultGenerator.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResultGenerator.java?rev=1589318&r1=1589317&r2=1589318&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResultGenerator.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResultGenerator.java Wed Apr 23 00:03:06 2014
@@ -59,12 +59,14 @@ public class ScannerResultGenerator exte
private Result cached;
public ScannerResultGenerator(final String tableName, final RowSpec rowspec,
- final Filter filter) throws IllegalArgumentException, IOException {
- this(tableName, rowspec, filter, -1);
+ final Filter filter, final boolean cacheBlocks)
+ throws IllegalArgumentException, IOException {
+ this(tableName, rowspec, filter, -1, cacheBlocks);
}
public ScannerResultGenerator(final String tableName, final RowSpec rowspec,
- final Filter filter, final int caching) throws IllegalArgumentException, IOException {
+ final Filter filter, final int caching, final boolean cacheBlocks)
+ throws IllegalArgumentException, IOException {
HTableInterface table = RESTServlet.getInstance().getTable(tableName);
try {
Scan scan;
@@ -94,6 +96,7 @@ public class ScannerResultGenerator exte
if (caching > 0 ) {
scan.setCaching(caching);
}
+ scan.setCacheBlocks(cacheBlocks);
if (rowspec.hasLabels()) {
scan.setAuthorizations(new Authorizations(rowspec.getLabels()));
}
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java?rev=1589318&r1=1589317&r2=1589318&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java Wed Apr 23 00:03:06 2014
@@ -116,6 +116,7 @@ public class ScannerModel implements Pro
private int maxVersions = Integer.MAX_VALUE;
private int caching = -1;
private List<String> labels = new ArrayList<String>();
+ private boolean cacheBlocks = true;
@XmlRootElement
static class FilterModel {
@@ -667,6 +668,14 @@ public class ScannerModel implements Pro
}
/**
+ * @return true if HFile blocks should be cached on the servers for this scan, false otherwise
+ */
+ @XmlAttribute
+ public boolean getCacheBlocks() {
+ return cacheBlocks;
+ }
+
+ /**
* @return the lower bound on timestamps of items of interest
*/
@XmlAttribute
@@ -734,6 +743,13 @@ public class ScannerModel implements Pro
}
/**
+ * @param value true if HFile blocks should be cached on the servers for this scan, false otherwise
+ */
+ public void setCacheBlocks(boolean value) {
+ this.cacheBlocks = value;
+ }
+
+ /**
* @param maxVersions maximum number of versions to return
*/
public void setMaxVersions(int maxVersions) {
@@ -791,6 +807,7 @@ public class ScannerModel implements Pro
for (String label : labels)
builder.addLabels(label);
}
+ builder.setCacheBlocks(cacheBlocks);
return builder.build().toByteArray();
}
@@ -826,12 +843,15 @@ public class ScannerModel implements Pro
if (builder.hasFilter()) {
filter = builder.getFilter();
}
- if(builder.getLabelsList() != null) {
+ if (builder.getLabelsList() != null) {
List<String> labels = builder.getLabelsList();
for(String label : labels) {
addLabel(label);
}
}
+ if (builder.hasCacheBlocks()) {
+ this.cacheBlocks = builder.getCacheBlocks();
+ }
return this;
}
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/protobuf/generated/ScannerMessage.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/protobuf/generated/ScannerMessage.java?rev=1589318&r1=1589317&r2=1589318&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/protobuf/generated/ScannerMessage.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/protobuf/generated/ScannerMessage.java Wed Apr 23 00:03:06 2014
@@ -103,10 +103,18 @@ public final class ScannerMessage {
// optional int32 caching = 9;
/**
* <code>optional int32 caching = 9;</code>
+ *
+ * <pre>
+ * specifies REST scanner caching
+ * </pre>
*/
boolean hasCaching();
/**
* <code>optional int32 caching = 9;</code>
+ *
+ * <pre>
+ * specifies REST scanner caching
+ * </pre>
*/
int getCaching();
@@ -129,6 +137,24 @@ public final class ScannerMessage {
*/
com.google.protobuf.ByteString
getLabelsBytes(int index);
+
+ // optional bool cacheBlocks = 11;
+ /**
+ * <code>optional bool cacheBlocks = 11;</code>
+ *
+ * <pre>
+ * server side block caching hint
+ * </pre>
+ */
+ boolean hasCacheBlocks();
+ /**
+ * <code>optional bool cacheBlocks = 11;</code>
+ *
+ * <pre>
+ * server side block caching hint
+ * </pre>
+ */
+ boolean getCacheBlocks();
}
/**
* Protobuf type {@code org.apache.hadoop.hbase.rest.protobuf.generated.Scanner}
@@ -237,6 +263,11 @@ public final class ScannerMessage {
labels_.add(input.readBytes());
break;
}
+ case 88: {
+ bitField0_ |= 0x00000100;
+ cacheBlocks_ = input.readBool();
+ break;
+ }
}
}
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
@@ -450,12 +481,20 @@ public final class ScannerMessage {
private int caching_;
/**
* <code>optional int32 caching = 9;</code>
+ *
+ * <pre>
+ * specifies REST scanner caching
+ * </pre>
*/
public boolean hasCaching() {
return ((bitField0_ & 0x00000080) == 0x00000080);
}
/**
* <code>optional int32 caching = 9;</code>
+ *
+ * <pre>
+ * specifies REST scanner caching
+ * </pre>
*/
public int getCaching() {
return caching_;
@@ -491,6 +530,30 @@ public final class ScannerMessage {
return labels_.getByteString(index);
}
+ // optional bool cacheBlocks = 11;
+ public static final int CACHEBLOCKS_FIELD_NUMBER = 11;
+ private boolean cacheBlocks_;
+ /**
+ * <code>optional bool cacheBlocks = 11;</code>
+ *
+ * <pre>
+ * server side block caching hint
+ * </pre>
+ */
+ public boolean hasCacheBlocks() {
+ return ((bitField0_ & 0x00000100) == 0x00000100);
+ }
+ /**
+ * <code>optional bool cacheBlocks = 11;</code>
+ *
+ * <pre>
+ * server side block caching hint
+ * </pre>
+ */
+ public boolean getCacheBlocks() {
+ return cacheBlocks_;
+ }
+
private void initFields() {
startRow_ = com.google.protobuf.ByteString.EMPTY;
endRow_ = com.google.protobuf.ByteString.EMPTY;
@@ -502,6 +565,7 @@ public final class ScannerMessage {
filter_ = "";
caching_ = 0;
labels_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+ cacheBlocks_ = false;
}
private byte memoizedIsInitialized = -1;
public final boolean isInitialized() {
@@ -545,6 +609,9 @@ public final class ScannerMessage {
for (int i = 0; i < labels_.size(); i++) {
output.writeBytes(10, labels_.getByteString(i));
}
+ if (((bitField0_ & 0x00000100) == 0x00000100)) {
+ output.writeBool(11, cacheBlocks_);
+ }
getUnknownFields().writeTo(output);
}
@@ -604,6 +671,10 @@ public final class ScannerMessage {
size += dataSize;
size += 1 * getLabelsList().size();
}
+ if (((bitField0_ & 0x00000100) == 0x00000100)) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeBoolSize(11, cacheBlocks_);
+ }
size += getUnknownFields().getSerializedSize();
memoizedSerializedSize = size;
return size;
@@ -740,6 +811,8 @@ public final class ScannerMessage {
bitField0_ = (bitField0_ & ~0x00000100);
labels_ = com.google.protobuf.LazyStringArrayList.EMPTY;
bitField0_ = (bitField0_ & ~0x00000200);
+ cacheBlocks_ = false;
+ bitField0_ = (bitField0_ & ~0x00000400);
return this;
}
@@ -811,6 +884,10 @@ public final class ScannerMessage {
bitField0_ = (bitField0_ & ~0x00000200);
}
result.labels_ = labels_;
+ if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
+ to_bitField0_ |= 0x00000100;
+ }
+ result.cacheBlocks_ = cacheBlocks_;
result.bitField0_ = to_bitField0_;
onBuilt();
return result;
@@ -873,6 +950,9 @@ public final class ScannerMessage {
}
onChanged();
}
+ if (other.hasCacheBlocks()) {
+ setCacheBlocks(other.getCacheBlocks());
+ }
this.mergeUnknownFields(other.getUnknownFields());
return this;
}
@@ -1254,18 +1334,30 @@ public final class ScannerMessage {
private int caching_ ;
/**
* <code>optional int32 caching = 9;</code>
+ *
+ * <pre>
+ * specifies REST scanner caching
+ * </pre>
*/
public boolean hasCaching() {
return ((bitField0_ & 0x00000100) == 0x00000100);
}
/**
* <code>optional int32 caching = 9;</code>
+ *
+ * <pre>
+ * specifies REST scanner caching
+ * </pre>
*/
public int getCaching() {
return caching_;
}
/**
* <code>optional int32 caching = 9;</code>
+ *
+ * <pre>
+ * specifies REST scanner caching
+ * </pre>
*/
public Builder setCaching(int value) {
bitField0_ |= 0x00000100;
@@ -1275,6 +1367,10 @@ public final class ScannerMessage {
}
/**
* <code>optional int32 caching = 9;</code>
+ *
+ * <pre>
+ * specifies REST scanner caching
+ * </pre>
*/
public Builder clearCaching() {
bitField0_ = (bitField0_ & ~0x00000100);
@@ -1376,6 +1472,55 @@ public final class ScannerMessage {
return this;
}
+ // optional bool cacheBlocks = 11;
+ private boolean cacheBlocks_ ;
+ /**
+ * <code>optional bool cacheBlocks = 11;</code>
+ *
+ * <pre>
+ * server side block caching hint
+ * </pre>
+ */
+ public boolean hasCacheBlocks() {
+ return ((bitField0_ & 0x00000400) == 0x00000400);
+ }
+ /**
+ * <code>optional bool cacheBlocks = 11;</code>
+ *
+ * <pre>
+ * server side block caching hint
+ * </pre>
+ */
+ public boolean getCacheBlocks() {
+ return cacheBlocks_;
+ }
+ /**
+ * <code>optional bool cacheBlocks = 11;</code>
+ *
+ * <pre>
+ * server side block caching hint
+ * </pre>
+ */
+ public Builder setCacheBlocks(boolean value) {
+ bitField0_ |= 0x00000400;
+ cacheBlocks_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ * <code>optional bool cacheBlocks = 11;</code>
+ *
+ * <pre>
+ * server side block caching hint
+ * </pre>
+ */
+ public Builder clearCacheBlocks() {
+ bitField0_ = (bitField0_ & ~0x00000400);
+ cacheBlocks_ = false;
+ onChanged();
+ return this;
+ }
+
// @@protoc_insertion_point(builder_scope:org.apache.hadoop.hbase.rest.protobuf.generated.Scanner)
}
@@ -1402,12 +1547,12 @@ public final class ScannerMessage {
static {
java.lang.String[] descriptorData = {
"\n\024ScannerMessage.proto\022/org.apache.hadoo" +
- "p.hbase.rest.protobuf.generated\"\265\001\n\007Scan" +
+ "p.hbase.rest.protobuf.generated\"\312\001\n\007Scan" +
"ner\022\020\n\010startRow\030\001 \001(\014\022\016\n\006endRow\030\002 \001(\014\022\017\n" +
"\007columns\030\003 \003(\014\022\r\n\005batch\030\004 \001(\005\022\021\n\tstartTi" +
"me\030\005 \001(\003\022\017\n\007endTime\030\006 \001(\003\022\023\n\013maxVersions" +
"\030\007 \001(\005\022\016\n\006filter\030\010 \001(\t\022\017\n\007caching\030\t \001(\005\022" +
- "\016\n\006labels\030\n \003(\t"
+ "\016\n\006labels\030\n \003(\t\022\023\n\013cacheBlocks\030\013 \001(\010"
};
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -1419,7 +1564,7 @@ public final class ScannerMessage {
internal_static_org_apache_hadoop_hbase_rest_protobuf_generated_Scanner_fieldAccessorTable = new
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
internal_static_org_apache_hadoop_hbase_rest_protobuf_generated_Scanner_descriptor,
- new java.lang.String[] { "StartRow", "EndRow", "Columns", "Batch", "StartTime", "EndTime", "MaxVersions", "Filter", "Caching", "Labels", });
+ new java.lang.String[] { "StartRow", "EndRow", "Columns", "Batch", "StartTime", "EndTime", "MaxVersions", "Filter", "Caching", "Labels", "CacheBlocks", });
return null;
}
};
Modified: hbase/trunk/hbase-server/src/main/resources/org/apache/hadoop/hbase/rest/XMLSchema.xsd
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/resources/org/apache/hadoop/hbase/rest/XMLSchema.xsd?rev=1589318&r1=1589317&r2=1589318&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/resources/org/apache/hadoop/hbase/rest/XMLSchema.xsd (original)
+++ hbase/trunk/hbase-server/src/main/resources/org/apache/hadoop/hbase/rest/XMLSchema.xsd Wed Apr 23 00:03:06 2014
@@ -111,13 +111,18 @@
<complexType name="Scanner">
<sequence>
<element name="column" type="base64Binary" minOccurs="0" maxOccurs="unbounded"></element>
- <element name="filter" type="string" minOccurs="0" maxOccurs="1"></element>
</sequence>
<attribute name="startRow" type="base64Binary"></attribute>
<attribute name="endRow" type="base64Binary"></attribute>
<attribute name="batch" type="int"></attribute>
<attribute name="startTime" type="int"></attribute>
<attribute name="endTime" type="int"></attribute>
+ <attribute name="filter" type="string"></attribute>
+ <attribute name="caching" type="int"></attribute>
+ <sequence>
+ <element name="labels" type="string" minOccurs="0" maxOccurs="unbounded"></element>
+ </sequence>
+ <attribute name="cacheBlocks" type="boolean"></attribute>
</complexType>
<element name="StorageClusterVersion" type="tns:StorageClusterVersion" />
Modified: hbase/trunk/hbase-server/src/main/resources/org/apache/hadoop/hbase/rest/protobuf/ScannerMessage.proto
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/resources/org/apache/hadoop/hbase/rest/protobuf/ScannerMessage.proto?rev=1589318&r1=1589317&r2=1589318&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/resources/org/apache/hadoop/hbase/rest/protobuf/ScannerMessage.proto (original)
+++ hbase/trunk/hbase-server/src/main/resources/org/apache/hadoop/hbase/rest/protobuf/ScannerMessage.proto Wed Apr 23 00:03:06 2014
@@ -26,6 +26,7 @@ message Scanner {
optional int64 endTime = 6;
optional int32 maxVersions = 7;
optional string filter = 8;
- optional int32 caching = 9;
+ optional int32 caching = 9; // specifies REST scanner caching
repeated string labels = 10;
+ optional bool cacheBlocks = 11; // server side block caching hint
}
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/rest/model/TestModelBase.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/rest/model/TestModelBase.java?rev=1589318&r1=1589317&r2=1589318&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/rest/model/TestModelBase.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/rest/model/TestModelBase.java Wed Apr 23 00:03:06 2014
@@ -20,22 +20,14 @@
package org.apache.hadoop.hbase.rest.model;
-import com.sun.jersey.api.json.JSONJAXBContext;
import junit.framework.TestCase;
import org.apache.hadoop.hbase.SmallTests;
import org.apache.hadoop.hbase.rest.ProtobufMessageHandler;
import org.apache.hadoop.hbase.rest.provider.JAXBContextResolver;
import org.apache.hadoop.hbase.util.Base64;
-import org.apache.hadoop.hbase.util.Bytes;
-import org.codehaus.jackson.JsonGenerationException;
-import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider;
-import org.codehaus.jackson.map.AnnotationIntrospector;
import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.map.SerializationConfig;
-import org.codehaus.jackson.map.introspect.JacksonAnnotationIntrospector;
import org.codehaus.jackson.node.ObjectNode;
-import org.codehaus.jackson.xc.JaxbAnnotationIntrospector;
import org.junit.experimental.categories.Category;
import javax.ws.rs.core.MediaType;
@@ -44,7 +36,6 @@ import javax.xml.bind.JAXBException;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
-import java.lang.reflect.InvocationTargetException;
@Category(SmallTests.class)
public abstract class TestModelBase<T> extends TestCase {
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/rest/model/TestScannerModel.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/rest/model/TestScannerModel.java?rev=1589318&r1=1589317&r2=1589318&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/rest/model/TestScannerModel.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/rest/model/TestScannerModel.java Wed Apr 23 00:03:06 2014
@@ -35,23 +35,26 @@ public class TestScannerModel extends Te
private static final long END_TIME = 1245393318192L;
private static final int CACHING = 1000;
private static final int BATCH = 100;
+ private static final boolean CACHE_BLOCKS = false;
public TestScannerModel() throws Exception {
super(ScannerModel.class);
AS_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
- + "<Scanner batch=\"100\" caching=\"1000\" endRow=\"enp5eng=\" endTime=\"1245393318192\" "
- + "maxVersions=\"2147483647\" startRow=\"YWJyYWNhZGFicmE=\" startTime=\"1245219839331\">"
+ + "<Scanner batch=\"100\" cacheBlocks=\"false\" caching=\"1000\" endRow=\"enp5eng=\" "
+ + "endTime=\"1245393318192\" maxVersions=\"2147483647\" startRow=\"YWJyYWNhZGFicmE=\" "
+ + "startTime=\"1245219839331\">"
+ "<column>Y29sdW1uMQ==</column><column>Y29sdW1uMjpmb28=</column>"
- + "<label>private</label><label>public</label></Scanner>";
+ + "<label>private</label><label>public</label>"
+ + "</Scanner>";
- AS_JSON = "{\"batch\":100,\"caching\":1000,\"endRow\":\"enp5eng=\",\"endTime\":1245393318192,"
- + "\"maxVersions\":2147483647,\"startRow\":\"YWJyYWNhZGFicmE=\",\"startTime\":1245219839331,"
- + "\"column\":[\"Y29sdW1uMQ==\",\"Y29sdW1uMjpmb28=\"],"
- +"\"labels\":[\"private\",\"public\"]}";
+ AS_JSON = "{\"batch\":100,\"caching\":1000,\"cacheBlocks\":false,\"endRow\":\"enp5eng=\","
+ + "\"endTime\":1245393318192,\"maxVersions\":2147483647,\"startRow\":\"YWJyYWNhZGFicmE=\","
+ + "\"startTime\":1245219839331,\"column\":[\"Y29sdW1uMQ==\",\"Y29sdW1uMjpmb28=\"],"
+ +"\"labels\":[\"private\",\"public\"]"
+ +"}";
- // TODO
AS_PB = "CgthYnJhY2FkYWJyYRIFenp5engaB2NvbHVtbjEaC2NvbHVtbjI6Zm9vIGQo47qL554kMLDi57mf"
- + "JDj/////B0joBw==";
+ + "JDj/////B0joB1IHcHJpdmF0ZVIGcHVibGljWAA=";
}
protected ScannerModel buildTestModel() {
@@ -66,6 +69,7 @@ public class TestScannerModel extends Te
model.setCaching(CACHING);
model.addLabel(PRIVATE);
model.addLabel(PUBLIC);
+ model.setCacheBlocks(CACHE_BLOCKS);
return model;
}
@@ -86,6 +90,7 @@ public class TestScannerModel extends Te
assertEquals(model.getEndTime(), END_TIME);
assertEquals(model.getBatch(), BATCH);
assertEquals(model.getCaching(), CACHING);
+ assertEquals(model.getCacheBlocks(), CACHE_BLOCKS);
boolean foundLabel1 = false;
boolean foundLabel2 = false;
if (model.getLabels() != null && model.getLabels().size() > 0) {