From 9139b8183cd36637716ad9c9e62897a3095fc903 Mon Sep 17 00:00:00 2001 From: Xuesen Liang Date: Mon, 22 Nov 2021 19:51:28 +0800 Subject: [PATCH] HBASE-26479: Print too slow/big scan's operation_id in region server log --- .../apache/hadoop/hbase/regionserver/RSRpcServices.java | 8 ++++++++ .../apache/hadoop/hbase/regionserver/RegionScanner.java | 8 ++++++++ .../hadoop/hbase/regionserver/RegionScannerImpl.java | 7 +++++++ 3 files changed, 23 insertions(+) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java index 724da1a211..0fad24c738 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java @@ -74,6 +74,7 @@ import org.apache.hadoop.hbase.client.Durability; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Increment; import org.apache.hadoop.hbase.client.Mutation; +import org.apache.hadoop.hbase.client.OperationWithAttributes; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.RegionInfo; import org.apache.hadoop.hbase.client.RegionReplicaUtil; @@ -1278,6 +1279,7 @@ public class RSRpcServices extends HBaseRpcServicesBase StringBuilder builder = new StringBuilder(); builder.append("table: ").append(scanner.getRegionInfo().getTable().getNameAsString()); builder.append(" region: ").append(scanner.getRegionInfo().getRegionNameAsString()); + builder.append(" operation_id: ").append(scanner.getOperationId()); return builder.toString(); } @@ -1290,6 +1292,12 @@ public class RSRpcServices extends HBaseRpcServicesBase StringBuilder builder = new StringBuilder(); builder.append("table: ").append(region.getRegionInfo().getTable().getNameAsString()); builder.append(" region: ").append(region.getRegionInfo().getRegionNameAsString()); + for (NameBytesPair pair : request.getScan().getAttributeList()) { + if (OperationWithAttributes.ID_ATRIBUTE.equals(pair.getName())) { + builder.append(" operation_id: ").append(Bytes.toString(pair.getValue().toByteArray())); + break; + } + } return builder.toString(); } catch (IOException ignored) { return null; diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionScanner.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionScanner.java index 1860d8185e..8e3dfd9282 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionScanner.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionScanner.java @@ -73,6 +73,14 @@ public interface RegionScanner extends InternalScanner { */ int getBatch(); + /** + * @return The Scanner's {@link org.apache.hadoop.hbase.client.Scan#ID_ATRIBUTE} value, + * or null if not set. + */ + default String getOperationId() { + return null; + } + /** * Grab the next row's worth of values. This is a special internal method to be called from * coprocessor hooks to avoid expensive setup. Caller must set the thread's readpoint, start and diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionScannerImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionScannerImpl.java index 881f4234bf..f73aea6e8c 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionScannerImpl.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionScannerImpl.java @@ -89,6 +89,7 @@ class RegionScannerImpl implements RegionScanner, Shipper, RpcCallback { private final long maxResultSize; private final ScannerContext defaultScannerContext; private final FilterWrapper filter; + private final String operationId; private RegionServerServices rsServices; @@ -121,6 +122,7 @@ class RegionScannerImpl implements RegionScanner, Shipper, RpcCallback { defaultScannerContext = ScannerContext.newBuilder().setBatchLimit(scan.getBatch()).build(); this.stopRow = scan.getStopRow(); this.includeStopRow = scan.includeStopRow(); + this.operationId = scan.getId(); // synchronize on scannerReadPoints so that nobody calculates // getSmallestReadPoint, before scannerReadPoints is updated. @@ -215,6 +217,11 @@ class RegionScannerImpl implements RegionScanner, Shipper, RpcCallback { return this.defaultScannerContext.getBatchLimit(); } + @Override + public String getOperationId() { + return operationId; + } + /** * Reset both the filter and the old filter. * @throws IOException in case a filter raises an I/O exception. -- 2.17.2 (Apple Git-113)