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 2013/09/16 23:05:35 UTC

svn commit: r1523812 - in /hbase/trunk: hbase-client/src/main/java/org/apache/hadoop/hbase/client/ hbase-common/src/main/java/org/apache/hadoop/hbase/ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/

Author: stack
Date: Mon Sep 16 21:05:35 2013
New Revision: 1523812

URL: http://svn.apache.org/r1523812
Log:
HBASE-9541 icv fails w/ npe if client does not support cellblocks

Modified:
    hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java
    hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java

Modified: hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java?rev=1523812&r1=1523811&r2=1523812&view=diff
==============================================================================
--- hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java (original)
+++ hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java Mon Sep 16 21:05:35 2013
@@ -1617,4 +1617,17 @@ public class HTable implements HTableInt
     return operationTimeout;
   }
 
-}
+  /**
+   * Run basic test.
+   * @param args Pass table name and row and will get the content.
+   * @throws IOException
+   */
+  public static void main(String[] args) throws IOException {
+    HTable t = new HTable(HBaseConfiguration.create(), args[0]);
+    try {
+      System.out.println(t.get(new Get(Bytes.toBytes(args[1]))));
+    } finally {
+      t.close();
+    }
+  }
+}
\ No newline at end of file

Modified: hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java?rev=1523812&r1=1523811&r2=1523812&view=diff
==============================================================================
--- hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java (original)
+++ hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java Mon Sep 16 21:05:35 2013
@@ -150,9 +150,9 @@ public final class CellUtil {
    * @param cellScannerables
    * @return CellScanner interface over <code>cellIterables</code>
    */
-  public static CellScanner createCellScanner(final List<CellScannable> cellScannerables) {
+  public static CellScanner createCellScanner(final List<? extends CellScannable> cellScannerables) {
     return new CellScanner() {
-      private final Iterator<CellScannable> iterator = cellScannerables.iterator();
+      private final Iterator<? extends CellScannable> iterator = cellScannerables.iterator();
       private CellScanner cellScanner = null;
 
       @Override

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=1523812&r1=1523811&r2=1523812&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java Mon Sep 16 21:05:35 2013
@@ -875,7 +875,7 @@ public class HRegionServer implements Cl
       mxBean = null;
     }
     if (this.thriftServer != null) this.thriftServer.shutdown();
-    this.leases.closeAfterLeasesExpire();
+    if (this.leases != null) this.leases.closeAfterLeasesExpire();
     this.rpcServer.stop();
     if (this.splitLogWorker != null) {
       splitLogWorker.stop();
@@ -2785,7 +2785,8 @@ public class HRegionServer implements Cl
       if (existence != null) {
         builder.setExists(existence.booleanValue());
       } else if (r != null) {
-        builder.setResult(ProtobufUtil.toResult(r));
+        ClientProtos.Result pbr = ProtobufUtil.toResult(r);
+        builder.setResult(pbr);
       }
       return builder.build();
     } catch (IOException ie) {
@@ -2810,8 +2811,7 @@ public class HRegionServer implements Cl
       requestCount.add(request.getGetCount());
       HRegion region = getRegion(request.getRegion());
       MultiGetResponse.Builder builder = MultiGetResponse.newBuilder();
-      for (ClientProtos.Get get: request.getGetList())
-      {
+      for (ClientProtos.Get get: request.getGetList()) {
         Boolean existence = null;
         Result r = null;
         if (request.getClosestRowBefore()) {
@@ -2947,16 +2947,8 @@ public class HRegionServer implements Cl
           throw new DoNotRetryIOException(
             "Unsupported mutate type: " + type.name());
       }
-      CellScannable cellsToReturn = null;
-      if (processed != null) {
-        builder.setProcessed(processed.booleanValue());
-      } else if (r != null) {
-        builder.setResult(ProtobufUtil.toResultNoData(r));
-        cellsToReturn = r;
-      }
-      if (controller != null && cellsToReturn != null) {
-        controller.setCellScanner(cellsToReturn.cellScanner());
-      }
+      if (processed != null) builder.setProcessed(processed.booleanValue());
+      addResult(builder, r, controller);
       return builder.build();
     } catch (IOException ie) {
       checkFileSystem();
@@ -2964,6 +2956,27 @@ public class HRegionServer implements Cl
     }
   }
 
+
+  /**
+   * @return True if current call supports cellblocks
+   */
+  private boolean isClientCellBlockSupport() {
+    RpcCallContext context = RpcServer.getCurrentCall();
+    return context != null && context.isClientCellBlockSupport();
+  }
+
+  private void addResult(final MutateResponse.Builder builder,
+      final Result result, final PayloadCarryingRpcController rpcc) {
+    if (result == null) return;
+    if (isClientCellBlockSupport()) {
+      builder.setResult(ProtobufUtil.toResultNoData(result));
+      rpcc.setCellScanner(result.cellScanner());
+    } else {
+      ClientProtos.Result pbr = ProtobufUtil.toResult(result);
+      builder.setResult(pbr);
+    }
+  }
+
   //
   // remote scanner interface
   //
@@ -3148,7 +3161,7 @@ public class HRegionServer implements Cl
               moreResults = false;
               results = null;
             } else {
-              formatResults(builder, results, controller);
+              addResults(builder, results, controller);
             }
           } finally {
             // We're done. On way out re-add the above removed lease.
@@ -3196,18 +3209,15 @@ public class HRegionServer implements Cl
     }
   }
 
-  private void formatResults(final ScanResponse.Builder builder, final List<Result> results,
+  private void addResults(final ScanResponse.Builder builder, final List<Result> results,
       final RpcController controller) {
     if (results == null || results.isEmpty()) return;
-    RpcCallContext context = RpcServer.getCurrentCall();
-    if (context != null && context.isClientCellBlockSupport()) {
-      List<CellScannable> cellScannables = new ArrayList<CellScannable>(results.size());
+    if (isClientCellBlockSupport()) {
       for (Result res : results) {
-        cellScannables.add(res);
         builder.addCellsPerResult(res.size());
       }
       ((PayloadCarryingRpcController)controller).
-        setCellScanner(CellUtil.createCellScanner(cellScannables));
+        setCellScanner(CellUtil.createCellScanner(results));
     } else {
       for (Result res: results) {
         ClientProtos.Result pbr = ProtobufUtil.toResult(res);