@@ -354,6 +354,11 @@ public class RSRpcServices extends HBaseRpcServicesBase<HRegionServer>
354354 public static final String REGIONSERVER_BOOTSTRAP_NODES_SERVICE_CONFIG =
355355 "hbase.regionserver.bootstrap.nodes.executorService" ;
356356
357+ /**
358+ * The row cache service
359+ */
360+ private final RowCacheService rowCacheService = new RowCacheService (getConfiguration ());
361+
357362 /**
358363 * An Rpc callback for closing a RegionScanner.
359364 */
@@ -668,7 +673,7 @@ private CheckAndMutateResult checkAndMutate(HRegion region, List<ClientProtos.Ac
668673 result = region .getCoprocessorHost ().preCheckAndMutate (checkAndMutate );
669674 }
670675 if (result == null ) {
671- result = region .checkAndMutate (checkAndMutate , nonceGroup , nonce );
676+ result = rowCacheService .checkAndMutate (region , checkAndMutate , nonceGroup , nonce );
672677 if (region .getCoprocessorHost () != null ) {
673678 result = region .getCoprocessorHost ().postCheckAndMutate (checkAndMutate , result );
674679 }
@@ -1020,7 +1025,8 @@ private void doBatchOp(final RegionActionResult.Builder builder, final HRegion r
10201025 Arrays .sort (mArray , (v1 , v2 ) -> Row .COMPARATOR .compare (v1 , v2 ));
10211026 }
10221027
1023- OperationStatus [] codes = region .batchMutate (mArray , atomic , nonceGroup , nonce );
1028+ OperationStatus [] codes =
1029+ rowCacheService .batchMutate (region , mArray , atomic , nonceGroup , nonce );
10241030
10251031 // When atomic is true, it indicates that the mutateRow API or the batch API with
10261032 // RowMutations is called. In this case, we need to merge the results of the
@@ -2336,6 +2342,11 @@ public UpdateFavoredNodesResponse updateFavoredNodes(RpcController controller,
23362342 @ Override
23372343 public BulkLoadHFileResponse bulkLoadHFile (final RpcController controller ,
23382344 final BulkLoadHFileRequest request ) throws ServiceException {
2345+ return rowCacheService .bulkLoadHFile (this , request );
2346+ }
2347+
2348+ BulkLoadHFileResponse bulkLoadHFileInternal (final BulkLoadHFileRequest request )
2349+ throws ServiceException {
23392350 long start = EnvironmentEdgeManager .currentTime ();
23402351 List <String > clusterIds = new ArrayList <>(request .getClusterIdsList ());
23412352 if (clusterIds .contains (this .server .getClusterId ())) {
@@ -2592,8 +2603,7 @@ private Result get(Get get, HRegion region, RegionScannersCloseCallBack closeCal
25922603 RegionScannerImpl scanner = null ;
25932604 long blockBytesScannedBefore = context .getBlockBytesScanned ();
25942605 try {
2595- scanner = region .getScanner (scan );
2596- scanner .next (results );
2606+ scanner = rowCacheService .getScanner (region , scan , results );
25972607 } finally {
25982608 if (scanner != null ) {
25992609 if (closeCallBack == null ) {
@@ -3002,33 +3012,10 @@ public MutateResponse mutate(final RpcController rpcc, final MutateRequest reque
30023012 builder .setMetrics (ProtobufUtil .toQueryMetrics (result .getMetrics ()));
30033013 }
30043014 } else {
3005- Result r = null ;
3006- Boolean processed = null ;
3007- MutationType type = mutation .getMutateType ();
3008- switch (type ) {
3009- case APPEND :
3010- // TODO: this doesn't actually check anything.
3011- r = append (region , quota , mutation , cellScanner , nonceGroup , spaceQuotaEnforcement ,
3012- context );
3013- break ;
3014- case INCREMENT :
3015- // TODO: this doesn't actually check anything.
3016- r = increment (region , quota , mutation , cellScanner , nonceGroup , spaceQuotaEnforcement ,
3017- context );
3018- break ;
3019- case PUT :
3020- put (region , quota , mutation , cellScanner , spaceQuotaEnforcement );
3021- processed = Boolean .TRUE ;
3022- break ;
3023- case DELETE :
3024- delete (region , quota , mutation , cellScanner , spaceQuotaEnforcement );
3025- processed = Boolean .TRUE ;
3026- break ;
3027- default :
3028- throw new DoNotRetryIOException ("Unsupported mutate type: " + type .name ());
3029- }
3030- if (processed != null ) {
3031- builder .setProcessed (processed );
3015+ Result r = rowCacheService .mutate (this , region , mutation , quota , cellScanner , nonceGroup ,
3016+ spaceQuotaEnforcement , context );
3017+ if (r == Result .EMPTY_RESULT ) {
3018+ builder .setProcessed (true );
30323019 }
30333020 boolean clientCellBlockSupported = isClientCellBlockSupport (context );
30343021 addResult (builder , r , controller , clientCellBlockSupported );
@@ -3047,6 +3034,29 @@ public MutateResponse mutate(final RpcController rpcc, final MutateRequest reque
30473034 }
30483035 }
30493036
3037+ Result mutateInternal (MutationProto mutation , HRegion region , OperationQuota quota ,
3038+ CellScanner cellScanner , long nonceGroup , ActivePolicyEnforcement spaceQuotaEnforcement ,
3039+ RpcCallContext context ) throws IOException {
3040+ MutationType type = mutation .getMutateType ();
3041+ return switch (type ) {
3042+ case APPEND ->
3043+ // TODO: this doesn't actually check anything.
3044+ append (region , quota , mutation , cellScanner , nonceGroup , spaceQuotaEnforcement , context );
3045+ case INCREMENT ->
3046+ // TODO: this doesn't actually check anything.
3047+ increment (region , quota , mutation , cellScanner , nonceGroup , spaceQuotaEnforcement ,
3048+ context );
3049+ case PUT -> {
3050+ put (region , quota , mutation , cellScanner , spaceQuotaEnforcement );
3051+ yield Result .EMPTY_RESULT ;
3052+ }
3053+ case DELETE -> {
3054+ delete (region , quota , mutation , cellScanner , spaceQuotaEnforcement );
3055+ yield Result .EMPTY_RESULT ;
3056+ }
3057+ };
3058+ }
3059+
30503060 private void put (HRegion region , OperationQuota quota , MutationProto mutation ,
30513061 CellScanner cellScanner , ActivePolicyEnforcement spaceQuota ) throws IOException {
30523062 long before = EnvironmentEdgeManager .currentTime ();
@@ -3095,7 +3105,7 @@ private CheckAndMutateResult checkAndMutate(HRegion region, OperationQuota quota
30953105 result = region .getCoprocessorHost ().preCheckAndMutate (checkAndMutate );
30963106 }
30973107 if (result == null ) {
3098- result = region .checkAndMutate (checkAndMutate , nonceGroup , nonce );
3108+ result = rowCacheService .checkAndMutate (region , checkAndMutate , nonceGroup , nonce );
30993109 if (region .getCoprocessorHost () != null ) {
31003110 result = region .getCoprocessorHost ().postCheckAndMutate (checkAndMutate , result );
31013111 }
@@ -4079,4 +4089,9 @@ RegionScannerContext checkQuotaAndGetRegionScannerContext(ScanRequest request,
40794089 Pair <String , RegionScannerHolder > pair = newRegionScanner (request , region , builder );
40804090 return new RegionScannerContext (pair .getFirst (), pair .getSecond (), quota );
40814091 }
4092+
4093+ // For testing only
4094+ public RowCacheService getRowCacheService () {
4095+ return rowCacheService ;
4096+ }
40824097}
0 commit comments