You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jx...@apache.org on 2013/03/20 01:08:56 UTC

svn commit: r1458577 - in /hbase/branches/0.95/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/res...

Author: jxiang
Date: Wed Mar 20 00:08:55 2013
New Revision: 1458577

URL: http://svn.apache.org/r1458577
Log:
HBASE-7803 [REST] Support caching on scan

Modified:
    hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResource.java
    hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResultGenerator.java
    hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java
    hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/protobuf/generated/ScannerMessage.java
    hbase/branches/0.95/hbase-server/src/main/resources/org/apache/hadoop/hbase/rest/protobuf/ScannerMessage.proto
    hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/rest/model/TestScannerModel.java

Modified: hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResource.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResource.java?rev=1458577&r1=1458576&r2=1458577&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResource.java (original)
+++ hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResource.java Wed Mar 20 00:08:55 2013
@@ -89,7 +89,7 @@ public class ScannerResource extends Res
       Filter filter = ScannerResultGenerator.buildFilterFromModel(model);
       String tableName = tableResource.getName();
       ScannerResultGenerator gen =
-        new ScannerResultGenerator(tableName, spec, filter);
+        new ScannerResultGenerator(tableName, spec, filter, model.getCaching());
       String id = gen.getID();
       ScannerInstanceResource instance =
         new ScannerInstanceResource(tableName, id, gen, model.getBatch());

Modified: hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResultGenerator.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResultGenerator.java?rev=1458577&r1=1458576&r2=1458577&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResultGenerator.java (original)
+++ hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/ScannerResultGenerator.java Wed Mar 20 00:08:55 2013
@@ -59,7 +59,12 @@ public class ScannerResultGenerator exte
 
   public ScannerResultGenerator(final String tableName, final RowSpec rowspec,
       final Filter filter) throws IllegalArgumentException, IOException {
-    HTablePool pool = RESTServlet.getInstance().getTablePool(); 
+    this(tableName, rowspec, filter, -1);
+  }
+
+  public ScannerResultGenerator(final String tableName, final RowSpec rowspec,
+      final Filter filter, final int caching) throws IllegalArgumentException, IOException {
+    HTablePool pool = RESTServlet.getInstance().getTablePool();
     HTableInterface table = pool.getTable(tableName);
     try {
       Scan scan;
@@ -86,6 +91,9 @@ public class ScannerResultGenerator exte
       }
       // always disable block caching on the cluster when scanning
       scan.setCacheBlocks(false);
+      if (caching > 0 ) {
+        scan.setCaching(caching);
+      }
       scanner = table.getScanner(scan);
       cached = null;
       id = Long.toString(System.currentTimeMillis()) +

Modified: hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java?rev=1458577&r1=1458576&r2=1458577&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java (original)
+++ hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java Wed Mar 20 00:08:55 2013
@@ -61,6 +61,7 @@ import com.sun.jersey.api.json.JSONUnmar
  *   <attribute name="startRow" type="base64Binary"></attribute>
  *   <attribute name="endRow" type="base64Binary"></attribute>
  *   <attribute name="batch" type="int"></attribute>
+ *   <attribute name="caching" type="int"></attribute>
  *   <attribute name="startTime" type="int"></attribute>
  *   <attribute name="endTime" type="int"></attribute>
  *   <attribute name="maxVersions" type="int"></attribute>
@@ -81,6 +82,7 @@ public class ScannerModel implements Pro
   private long endTime = Long.MAX_VALUE;
   private String filter = null;
   private int maxVersions = Integer.MAX_VALUE;
+  private int caching = -1;
 
   @XmlRootElement
   static class FilterModel {
@@ -472,7 +474,11 @@ public class ScannerModel implements Pro
     model.setEndTime(scan.getTimeRange().getMax());
     int caching = scan.getCaching();
     if (caching > 0) {
-      model.setBatch(caching);
+      model.setCaching(caching);
+    }
+    int batch = scan.getBatch();
+    if (batch > 0) {
+      model.setBatch(batch);
     }
     int maxVersions = scan.getMaxVersions();
     if (maxVersions > 0) {
@@ -496,18 +502,20 @@ public class ScannerModel implements Pro
    * @param endRow the end key of the row-range
    * @param columns the columns to scan
    * @param batch the number of values to return in batch
+   * @param caching the number of rows that the scanner will fetch at once
    * @param endTime the upper bound on timestamps of values of interest
    * @param maxVersions the maximum number of versions to return
    * @param filter a filter specification
    * (values with timestamps later than this are excluded)
    */
   public ScannerModel(byte[] startRow, byte[] endRow, List<byte[]> columns,
-      int batch, long endTime, int maxVersions, String filter) {
+      int batch, int caching, long endTime, int maxVersions, String filter) {
     super();
     this.startRow = startRow;
     this.endRow = endRow;
     this.columns = columns;
     this.batch = batch;
+    this.caching = caching;
     this.endTime = endTime;
     this.maxVersions = maxVersions;
     this.filter = filter;
@@ -519,6 +527,7 @@ public class ScannerModel implements Pro
    * @param endRow the end key of the row-range
    * @param columns the columns to scan
    * @param batch the number of values to return in batch
+   * @param caching the number of rows that the scanner will fetch at once
    * @param startTime the lower bound on timestamps of values of interest
    * (values with timestamps earlier than this are excluded)
    * @param endTime the upper bound on timestamps of values of interest
@@ -526,12 +535,13 @@ public class ScannerModel implements Pro
    * @param filter a filter specification
    */
   public ScannerModel(byte[] startRow, byte[] endRow, List<byte[]> columns,
-      int batch, long startTime, long endTime, String filter) {
+      int batch, int caching, long startTime, long endTime, String filter) {
     super();
     this.startRow = startRow;
     this.endRow = endRow;
     this.columns = columns;
     this.batch = batch;
+    this.caching = caching;
     this.startTime = startTime;
     this.endTime = endTime;
     this.filter = filter;
@@ -582,7 +592,7 @@ public class ScannerModel implements Pro
   public List<byte[]> getColumns() {
     return columns;
   }
-  
+
   /**
    * @return the number of cells to return in batch
    */
@@ -592,6 +602,14 @@ public class ScannerModel implements Pro
   }
 
   /**
+   * @return the number of rows that the scanner to fetch at once
+   */
+  @XmlAttribute
+  public int getCaching() {
+    return caching;
+  }
+
+  /**
    * @return the lower bound on timestamps of items of interest
    */
   @XmlAttribute
@@ -652,6 +670,13 @@ public class ScannerModel implements Pro
   }
 
   /**
+   * @param caching the number of rows to fetch at once
+   */
+  public void setCaching(int caching) {
+    this.caching = caching;
+  }
+
+  /**
    * @param maxVersions maximum number of versions to return
    */
   public void setMaxVersions(int maxVersions) {
@@ -698,6 +723,9 @@ public class ScannerModel implements Pro
       builder.setEndTime(endTime);
     }
     builder.setBatch(getBatch());
+    if (caching > 0) {
+      builder.setCaching(caching);
+    }
     builder.setMaxVersions(maxVersions);
     if (filter != null) {
       builder.setFilter(filter);
@@ -722,6 +750,9 @@ public class ScannerModel implements Pro
     if (builder.hasBatch()) {
       batch = builder.getBatch();
     }
+    if (builder.hasCaching()) {
+      caching = builder.getCaching();
+    }
     if (builder.hasStartTime()) {
       startTime = builder.getStartTime();
     }

Modified: hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/protobuf/generated/ScannerMessage.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/protobuf/generated/ScannerMessage.java?rev=1458577&r1=1458576&r2=1458577&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/protobuf/generated/ScannerMessage.java (original)
+++ hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/rest/protobuf/generated/ScannerMessage.java Wed Mar 20 00:08:55 2013
@@ -43,6 +43,10 @@ public final class ScannerMessage {
     // optional string filter = 8;
     boolean hasFilter();
     String getFilter();
+    
+    // optional int32 caching = 9;
+    boolean hasCaching();
+    int getCaching();
   }
   public static final class Scanner extends
       com.google.protobuf.GeneratedMessage
@@ -179,6 +183,16 @@ public final class ScannerMessage {
       }
     }
     
+    // optional int32 caching = 9;
+    public static final int CACHING_FIELD_NUMBER = 9;
+    private int caching_;
+    public boolean hasCaching() {
+      return ((bitField0_ & 0x00000080) == 0x00000080);
+    }
+    public int getCaching() {
+      return caching_;
+    }
+    
     private void initFields() {
       startRow_ = com.google.protobuf.ByteString.EMPTY;
       endRow_ = com.google.protobuf.ByteString.EMPTY;
@@ -188,6 +202,7 @@ public final class ScannerMessage {
       endTime_ = 0L;
       maxVersions_ = 0;
       filter_ = "";
+      caching_ = 0;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -225,6 +240,9 @@ public final class ScannerMessage {
       if (((bitField0_ & 0x00000040) == 0x00000040)) {
         output.writeBytes(8, getFilterBytes());
       }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        output.writeInt32(9, caching_);
+      }
       getUnknownFields().writeTo(output);
     }
     
@@ -271,6 +289,10 @@ public final class ScannerMessage {
         size += com.google.protobuf.CodedOutputStream
           .computeBytesSize(8, getFilterBytes());
       }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(9, caching_);
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -411,6 +433,8 @@ public final class ScannerMessage {
         bitField0_ = (bitField0_ & ~0x00000040);
         filter_ = "";
         bitField0_ = (bitField0_ & ~0x00000080);
+        caching_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000100);
         return this;
       }
       
@@ -482,6 +506,10 @@ public final class ScannerMessage {
           to_bitField0_ |= 0x00000040;
         }
         result.filter_ = filter_;
+        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
+          to_bitField0_ |= 0x00000080;
+        }
+        result.caching_ = caching_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -529,6 +557,9 @@ public final class ScannerMessage {
         if (other.hasFilter()) {
           setFilter(other.getFilter());
         }
+        if (other.hasCaching()) {
+          setCaching(other.getCaching());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -600,6 +631,11 @@ public final class ScannerMessage {
               filter_ = input.readBytes();
               break;
             }
+            case 72: {
+              bitField0_ |= 0x00000100;
+              caching_ = input.readInt32();
+              break;
+            }
           }
         }
       }
@@ -825,6 +861,27 @@ public final class ScannerMessage {
         onChanged();
       }
       
+      // optional int32 caching = 9;
+      private int caching_ ;
+      public boolean hasCaching() {
+        return ((bitField0_ & 0x00000100) == 0x00000100);
+      }
+      public int getCaching() {
+        return caching_;
+      }
+      public Builder setCaching(int value) {
+        bitField0_ |= 0x00000100;
+        caching_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearCaching() {
+        bitField0_ = (bitField0_ & ~0x00000100);
+        caching_ = 0;
+        onChanged();
+        return this;
+      }
+      
       // @@protoc_insertion_point(builder_scope:org.apache.hadoop.hbase.rest.protobuf.generated.Scanner)
     }
     
@@ -851,11 +908,11 @@ public final class ScannerMessage {
   static {
     java.lang.String[] descriptorData = {
       "\n\024ScannerMessage.proto\022/org.apache.hadoo" +
-      "p.hbase.rest.protobuf.generated\"\224\001\n\007Scan" +
+      "p.hbase.rest.protobuf.generated\"\245\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"
+      "\030\007 \001(\005\022\016\n\006filter\030\010 \001(\t\022\017\n\007caching\030\t \001(\005"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
       new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -867,7 +924,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", },
+              new java.lang.String[] { "StartRow", "EndRow", "Columns", "Batch", "StartTime", "EndTime", "MaxVersions", "Filter", "Caching", },
               org.apache.hadoop.hbase.rest.protobuf.generated.ScannerMessage.Scanner.class,
               org.apache.hadoop.hbase.rest.protobuf.generated.ScannerMessage.Scanner.Builder.class);
           return null;

Modified: hbase/branches/0.95/hbase-server/src/main/resources/org/apache/hadoop/hbase/rest/protobuf/ScannerMessage.proto
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/resources/org/apache/hadoop/hbase/rest/protobuf/ScannerMessage.proto?rev=1458577&r1=1458576&r2=1458577&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/resources/org/apache/hadoop/hbase/rest/protobuf/ScannerMessage.proto (original)
+++ hbase/branches/0.95/hbase-server/src/main/resources/org/apache/hadoop/hbase/rest/protobuf/ScannerMessage.proto Wed Mar 20 00:08:55 2013
@@ -26,4 +26,5 @@ message Scanner {
   optional int64 endTime = 6;
   optional int32 maxVersions = 7;
   optional string filter = 8;
+  optional int32 caching = 9;
 }

Modified: hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/rest/model/TestScannerModel.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/rest/model/TestScannerModel.java?rev=1458577&r1=1458576&r2=1458577&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/rest/model/TestScannerModel.java (original)
+++ hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/rest/model/TestScannerModel.java Wed Mar 20 00:08:55 2013
@@ -41,21 +41,23 @@ public class TestScannerModel extends Te
   private static final byte[] COLUMN2 = Bytes.toBytes("column2:foo");
   private static final long START_TIME = 1245219839331L;
   private static final long END_TIME = 1245393318192L;
+  private static final int CACHING = 1000;
   private static final int BATCH = 100;
 
   private static final String AS_XML =
     "<Scanner startTime=\"1245219839331\"" +
-      " startRow=\"YWJyYWNhZGFicmE=\"" + 
+      " startRow=\"YWJyYWNhZGFicmE=\"" +
       " endTime=\"1245393318192\"" +
       " endRow=\"enp5eng=\"" +
-      " batch=\"100\">" +
+      " batch=\"100\"" +
+      " caching=\"1000\">" +
         "<column>Y29sdW1uMQ==</column>" +
         "<column>Y29sdW1uMjpmb28=</column>" +
       "</Scanner>";
 
-  private static final String AS_PB = 
-    "CgthYnJhY2FkYWJyYRIFenp5engaB2NvbHVtbjEaC2NvbHVtbjI6Zm9vIGQo47qL554kMLDi57mf" +
-    "JA==";
+  private static final String AS_PB =
+    "CgthYnJhY2FkYWJyYRIFenp5engaB2NvbHVtbjEaC2NvbHVtbjI6Zm9" +
+    "vIGQo47qL554kMLDi57mfJDj/////B0joBw==";
 
   private JAXBContext context;
 
@@ -73,6 +75,7 @@ public class TestScannerModel extends Te
     model.setStartTime(START_TIME);
     model.setEndTime(END_TIME);
     model.setBatch(BATCH);
+    model.setCaching(CACHING);
     return model;
   }
 
@@ -114,6 +117,7 @@ public class TestScannerModel extends Te
     assertEquals(model.getStartTime(), START_TIME);
     assertEquals(model.getEndTime(), END_TIME);
     assertEquals(model.getBatch(), BATCH);
+    assertEquals(model.getCaching(), CACHING);
   }
 
   public void testBuildModel() throws Exception {
@@ -127,6 +131,5 @@ public class TestScannerModel extends Te
   public void testFromPB() throws Exception {
     checkModel(fromPB(AS_PB));
   }
-
 }