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 1523684) +++ hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java (working copy) @@ -1632,4 +1632,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 1523684) +++ hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java (working copy) @@ -150,9 +150,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 1523684) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (working copy) @@ -875,7 +875,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(); @@ -2785,7 +2785,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) { @@ -2810,8 +2811,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()) { @@ -2947,23 +2947,35 @@ 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()); - } - return builder.build(); + if (processed != null) builder.setProcessed(processed.booleanValue()); + return formatResult(builder, r, controller).build(); } catch (IOException ie) { checkFileSystem(); throw new ServiceException(ie); } } + /** + * @return True if current call supports cellblocks + */ + private boolean isClientCellBlockSupport() { + RpcCallContext context = RpcServer.getCurrentCall(); + return context != null && context.isClientCellBlockSupport(); + } + + private MutateResponse.Builder formatResult(final MutateResponse.Builder builder, + final Result result, final PayloadCarryingRpcController rpcc) { + if (result == null) return null; + if (isClientCellBlockSupport()) { + builder.setResult(ProtobufUtil.toResultNoData(result)); + rpcc.setCellScanner(result.cellScanner()); + } else { + ClientProtos.Result pbr = ProtobufUtil.toResult(result); + builder.setResult(pbr); + } + return builder; + } + // // remote scanner interface // @@ -3199,15 +3211,12 @@ private void formatResults(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);