Index: hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java =================================================================== --- hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java (revision 1523806) +++ hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java (working copy) @@ -1617,4 +1617,17 @@ 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 Index: hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java =================================================================== --- hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java (revision 1523806) +++ hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java (working copy) @@ -139,9 +139,9 @@ * @param cellScannerables * @return CellScanner interface over cellIterables */ - public static CellScanner createCellScanner(final List cellScannerables) { + public static CellScanner createCellScanner(final List cellScannerables) { return new CellScanner() { - private final Iterator iterator = cellScannerables.iterator(); + private final Iterator iterator = cellScannerables.iterator(); private CellScanner cellScanner = null; @Override Index: hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (revision 1523806) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (working copy) @@ -854,7 +854,7 @@ 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(); @@ -2764,7 +2764,8 @@ 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) { @@ -2789,8 +2790,7 @@ 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()) { @@ -2926,16 +2926,8 @@ 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 (cellsToReturn != null) { - controller.setCellScanner(cellsToReturn.cellScanner()); - } + if (processed != null) builder.setProcessed(processed.booleanValue()); + addResult(builder, r, controller); return builder.build(); } catch (IOException ie) { checkFileSystem(); @@ -2943,6 +2935,27 @@ } } + + /** + * @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 // @@ -3127,7 +3140,7 @@ 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. @@ -3175,18 +3188,15 @@ } } - private void formatResults(final ScanResponse.Builder builder, final List results, + private void addResults(final ScanResponse.Builder builder, final List results, final RpcController controller) { if (results == null || results.isEmpty()) return; - RpcCallContext context = RpcServer.getCurrentCall(); - if (context != null && context.isClientCellBlockSupport()) { - List cellScannables = new ArrayList(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);