You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by wc...@apache.org on 2023/11/02 21:06:08 UTC
(hbase) branch branch-2 updated: HBASE-27794: Tooling for parsing/reading the prefetch files list file (#5468) (#5491)
This is an automated email from the ASF dual-hosted git repository.
wchevreuil pushed a commit to branch branch-2
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2 by this push:
new 8b1f690adaf HBASE-27794: Tooling for parsing/reading the prefetch files list file (#5468) (#5491)
8b1f690adaf is described below
commit 8b1f690adafea6a2df3012f1fc5708d3dea702b0
Author: Kota-SH <sh...@gmail.com>
AuthorDate: Thu Nov 2 16:06:02 2023 -0500
HBASE-27794: Tooling for parsing/reading the prefetch files list file (#5468) (#5491)
Signed-off-by: Wellington Chevreuil <wc...@apache.org>
(cherry picked from commit fa4c8960e587e9f62442c35fd11a85e1cc4b4690)
---
.../main/java/org/apache/hadoop/hbase/client/Admin.java | 5 +++++
.../java/org/apache/hadoop/hbase/client/AsyncAdmin.java | 5 +++++
.../org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java | 5 +++++
.../java/org/apache/hadoop/hbase/client/HBaseAdmin.java | 11 ++++++++++-
.../apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java | 13 +++++++++++++
.../hadoop/hbase/shaded/protobuf/ProtobufUtil.java | 17 +++++++++++++++++
hbase-protocol-shaded/src/main/protobuf/Admin.proto | 10 ++++++++++
.../org/apache/hadoop/hbase/io/hfile/BlockCache.java | 9 +++++++++
.../hadoop/hbase/io/hfile/CombinedBlockCache.java | 10 ++++++++++
.../apache/hadoop/hbase/io/hfile/HFilePreadReader.java | 5 +++--
.../hadoop/hbase/io/hfile/bucket/BucketCache.java | 5 +++--
.../apache/hadoop/hbase/master/MasterRpcServices.java | 8 ++++++++
.../apache/hadoop/hbase/regionserver/RSRpcServices.java | 13 +++++++++++++
.../hadoop/hbase/io/hfile/TestPrefetchRSClose.java | 16 +++++++++++++++-
.../hbase/io/hfile/TestPrefetchWithBucketCache.java | 2 +-
.../apache/hadoop/hbase/master/MockRegionServer.java | 8 ++++++++
.../apache/hadoop/hbase/thrift2/client/ThriftAdmin.java | 8 ++++++++
17 files changed, 143 insertions(+), 7 deletions(-)
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java
index ab3df597bfa..871c1b82149 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java
@@ -3317,4 +3317,9 @@ public interface Admin extends Abortable, Closeable {
* @throws IOException if a remote or network exception occurs
*/
Future<Void> truncateRegionAsync(byte[] regionName) throws IOException;
+
+ /**
+ * Get the list of cached files
+ */
+ List<String> getCachedFilesList(ServerName serverName) throws IOException;
}
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java
index 6b95e19a22a..bde7e950e56 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java
@@ -1702,4 +1702,9 @@ public interface AsyncAdmin {
* Flush master local region
*/
CompletableFuture<Void> flushMasterStore();
+
+ /**
+ * Get the list of cached files
+ */
+ CompletableFuture<List<String>> getCachedFilesList(ServerName serverName);
}
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java
index 4c9138e7306..cf473291319 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java
@@ -911,4 +911,9 @@ class AsyncHBaseAdmin implements AsyncAdmin {
public CompletableFuture<Void> flushMasterStore() {
return wrap(rawAdmin.flushMasterStore());
}
+
+ @Override
+ public CompletableFuture<List<String>> getCachedFilesList(ServerName serverName) {
+ return wrap(rawAdmin.getCachedFilesList(serverName));
+ }
}
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
index c54e561cc21..601f13b4889 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
@@ -2078,7 +2078,7 @@ public class HBaseAdmin implements Admin {
throw new IllegalArgumentException("Invalid region: " + Bytes.toStringBinary(regionName));
}
- TableName tableName = hri.getTable();
+ TableName tableName = (hri != null) ? hri.getTable() : null;
MasterProtos.TruncateRegionResponse response =
executeCallable(getTruncateRegionCallable(tableName, hri));
@@ -2086,6 +2086,15 @@ public class HBaseAdmin implements Admin {
return new TruncateRegionFuture(this, tableName, response);
}
+ /**
+ * Get the list of cached files
+ */
+ @Override
+ public List<String> getCachedFilesList(ServerName serverName) throws IOException {
+ return ProtobufUtil.getCachedFilesList(rpcControllerFactory.newController(),
+ this.connection.getAdmin(serverName));
+ }
+
private MasterCallable<MasterProtos.TruncateRegionResponse>
getTruncateRegionCallable(TableName tableName, RegionInfo hri) {
return new MasterCallable<MasterProtos.TruncateRegionResponse>(getConnection(),
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java
index 7a560e51e0a..cf103f401fc 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java
@@ -129,6 +129,8 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactionS
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactionSwitchResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetCachedFilesListRequest;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetCachedFilesListResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;
@@ -4264,4 +4266,15 @@ class RawAsyncHBaseAdmin implements AsyncAdmin {
(s, c, req, done) -> s.flushMasterStore(c, req, done), resp -> null))
.call();
}
+
+ @Override
+ public CompletableFuture<List<String>> getCachedFilesList(ServerName serverName) {
+ GetCachedFilesListRequest.Builder request = GetCachedFilesListRequest.newBuilder();
+ return this.<List<String>> newAdminCaller()
+ .action((controller, stub) -> this.<GetCachedFilesListRequest, GetCachedFilesListResponse,
+ List<String>> adminCall(controller, stub, request.build(),
+ (s, c, req, done) -> s.getCachedFilesList(c, req, done),
+ resp -> resp.getCachedFilesList()))
+ .serverName(serverName).call();
+ }
}
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java
index a3b55e5ef16..477e869296a 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java
@@ -149,6 +149,8 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearSlowLogResponses;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetCachedFilesListRequest;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetCachedFilesListResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;
@@ -1746,6 +1748,21 @@ public final class ProtobufUtil {
return getRegionInfos(response);
}
+ /**
+ * Get the list of cached files
+ */
+ public static List<String> getCachedFilesList(final RpcController controller,
+ final AdminService.BlockingInterface admin) throws IOException {
+ GetCachedFilesListRequest request = GetCachedFilesListRequest.newBuilder().build();
+ GetCachedFilesListResponse response = null;
+ try {
+ response = admin.getCachedFilesList(controller, request);
+ } catch (ServiceException se) {
+ throw getRemoteException(se);
+ }
+ return new ArrayList<>(response.getCachedFilesList());
+ }
+
/**
* Get the list of region info from a GetOnlineRegionResponse
* @param proto the GetOnlineRegionResponse
diff --git a/hbase-protocol-shaded/src/main/protobuf/Admin.proto b/hbase-protocol-shaded/src/main/protobuf/Admin.proto
index 0c25be1a7f2..ae0bd78fbf9 100644
--- a/hbase-protocol-shaded/src/main/protobuf/Admin.proto
+++ b/hbase-protocol-shaded/src/main/protobuf/Admin.proto
@@ -283,6 +283,13 @@ message ExecuteProceduresRequest {
message ExecuteProceduresResponse {
}
+message GetCachedFilesListRequest {
+}
+
+message GetCachedFilesListResponse {
+ repeated string cached_files = 1;
+}
+
/**
* Slow/Large log (LogRequest) use-case specific RPC request. This request payload will be
* converted in bytes and sent to generic RPC API: GetLogEntries
@@ -406,4 +413,7 @@ service AdminService {
rpc GetLogEntries(LogRequest)
returns(LogEntry);
+ rpc GetCachedFilesList(GetCachedFilesListRequest)
+ returns(GetCachedFilesListResponse);
+
}
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/BlockCache.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/BlockCache.java
index 6c05402f5a5..fee9325fae2 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/BlockCache.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/BlockCache.java
@@ -18,6 +18,8 @@
package org.apache.hadoop.hbase.io.hfile;
import java.util.Iterator;
+import java.util.Map;
+import java.util.Optional;
import org.apache.yetus.audience.InterfaceAudience;
/**
@@ -146,4 +148,11 @@ public interface BlockCache extends Iterable<CachedBlock> {
default boolean isMetaBlock(BlockType blockType) {
return blockType != null && blockType.getCategory() != BlockType.BlockCategory.DATA;
}
+
+ /**
+ * Returns the list of fully cached files
+ */
+ default Optional<Map<String, Boolean>> getFullyCachedFiles() {
+ return Optional.empty();
+ }
}
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.java
index 4ad6dc3683f..5ff2ee02a6e 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.java
@@ -18,6 +18,8 @@
package org.apache.hadoop.hbase.io.hfile;
import java.util.Iterator;
+import java.util.Map;
+import java.util.Optional;
import org.apache.hadoop.hbase.io.HeapSize;
import org.apache.hadoop.hbase.io.hfile.bucket.BucketCache;
import org.apache.yetus.audience.InterfaceAudience;
@@ -369,6 +371,14 @@ public class CombinedBlockCache implements ResizableBlockCache, HeapSize {
return new BlockCache[] { this.l1Cache, this.l2Cache };
}
+ /**
+ * Returns the list of fully cached files
+ */
+ @Override
+ public Optional<Map<String, Boolean>> getFullyCachedFiles() {
+ return this.l2Cache.getFullyCachedFiles();
+ }
+
@Override
public void setMaxSize(long size) {
this.l1Cache.setMaxSize(size);
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFilePreadReader.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFilePreadReader.java
index 1ac9a4ffb84..f1579ea53b8 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFilePreadReader.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFilePreadReader.java
@@ -42,8 +42,9 @@ public class HFilePreadReader extends HFileReaderImpl {
final MutableBoolean fileAlreadyCached = new MutableBoolean(false);
Optional<BucketCache> bucketCacheOptional =
BucketCache.getBucketCacheFromCacheConfig(cacheConf);
- bucketCacheOptional.ifPresent(bc -> fileAlreadyCached
- .setValue(bc.getFullyCachedFiles().get(path.getName()) == null ? false : true));
+ bucketCacheOptional.flatMap(BucketCache::getFullyCachedFiles).ifPresent(fcf -> {
+ fileAlreadyCached.setValue(fcf.get(path.getName()) == null ? false : true);
+ });
// Prefetch file blocks upon open if requested
if (
cacheConf.shouldPrefetchOnOpen() && cacheIfCompactionsOff()
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.java
index f7f6f8a8ee0..5b1757b8507 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.java
@@ -1950,8 +1950,9 @@ public class BucketCache implements BlockCache, HeapSize {
return backingMapValidated;
}
- public Map<String, Boolean> getFullyCachedFiles() {
- return fullyCachedFiles;
+ @Override
+ public Optional<Map<String, Boolean>> getFullyCachedFiles() {
+ return Optional.of(fullyCachedFiles);
}
public static Optional<BucketCache> getBucketCacheFromCacheConfig(CacheConfig cacheConf) {
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
index d4cfaaaf47a..2924ebef000 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
@@ -152,6 +152,8 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Rev
import org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.RevokeResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetCachedFilesListRequest;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetCachedFilesListResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;
@@ -3065,6 +3067,12 @@ public class MasterRpcServices extends RSRpcServices
throw new ServiceException("Invalid request params");
}
+ @Override
+ public GetCachedFilesListResponse getCachedFilesList(RpcController controller,
+ GetCachedFilesListRequest request) throws ServiceException {
+ throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));
+ }
+
private MasterProtos.BalancerDecisionsResponse
getBalancerDecisions(MasterProtos.BalancerDecisionsRequest request) {
final NamedQueueRecorder namedQueueRecorder = this.regionServer.getNamedQueueRecorder();
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 834e3a6301a..09dc35963c2 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
@@ -188,6 +188,8 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProc
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetCachedFilesListRequest;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetCachedFilesListResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;
@@ -4033,6 +4035,17 @@ public class RSRpcServices implements HBaseRPCErrorHandler, AdminService.Blockin
throw new ServiceException("Invalid request params");
}
+ @Override
+ public GetCachedFilesListResponse getCachedFilesList(RpcController controller,
+ GetCachedFilesListRequest request) throws ServiceException {
+ GetCachedFilesListResponse.Builder responseBuilder = GetCachedFilesListResponse.newBuilder();
+ List<String> fullyCachedFiles = new ArrayList<>();
+ regionServer.getBlockCache().flatMap(BlockCache::getFullyCachedFiles).ifPresent(fcf -> {
+ fullyCachedFiles.addAll(fcf.keySet());
+ });
+ return responseBuilder.addAllCachedFiles(fullyCachedFiles).build();
+ }
+
public RpcScheduler getRpcScheduler() {
return rpcServer.getScheduler();
}
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestPrefetchRSClose.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestPrefetchRSClose.java
index 3794c6c28d7..5164d582fa0 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestPrefetchRSClose.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestPrefetchRSClose.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.File;
+import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseClassTestRule;
@@ -30,11 +31,14 @@ import org.apache.hadoop.hbase.HBaseTestingUtility;
import org.apache.hadoop.hbase.MiniHBaseCluster;
import org.apache.hadoop.hbase.StartMiniClusterOption;
import org.apache.hadoop.hbase.TableName;
+import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.client.TableDescriptor;
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
+import org.apache.hadoop.hbase.regionserver.HRegionServer;
+import org.apache.hadoop.hbase.regionserver.HStoreFile;
import org.apache.hadoop.hbase.testclassification.IOTests;
import org.apache.hadoop.hbase.testclassification.LargeTests;
import org.apache.hadoop.hbase.util.Bytes;
@@ -111,7 +115,17 @@ public class TestPrefetchRSClose {
// Default interval for cache persistence is 1000ms. So after 1000ms, both the persistence files
// should exist.
- assertTrue(new File(testDir + "/bucket.persistence").exists());
+
+ HRegionServer regionServingRS = cluster.getRegionServer(1).getRegions(tableName).size() == 1
+ ? cluster.getRegionServer(1)
+ : cluster.getRegionServer(0);
+
+ Admin admin = TEST_UTIL.getAdmin();
+ List<String> cachedFilesList = admin.getCachedFilesList(regionServingRS.getServerName());
+ assertEquals(1, cachedFilesList.size());
+ for (HStoreFile h : regionServingRS.getRegions().get(0).getStores().get(0).getStorefiles()) {
+ assertTrue(cachedFilesList.contains(h.getPath().getName()));
+ }
// Stop the RS
cluster.stopRegionServer(0);
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestPrefetchWithBucketCache.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestPrefetchWithBucketCache.java
index 768e41019d8..f9f48ff8535 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestPrefetchWithBucketCache.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestPrefetchWithBucketCache.java
@@ -123,7 +123,7 @@ public class TestPrefetchWithBucketCache {
BlockCacheKey key = snapshot.keySet().stream().findFirst().get();
LOG.debug("removing block {}", key);
bc.getBackingMap().remove(key);
- bc.getFullyCachedFiles().remove(storeFile.getName());
+ bc.getFullyCachedFiles().ifPresent(fcf -> fcf.remove(storeFile.getName()));
assertTrue(snapshot.size() > bc.getBackingMap().size());
LOG.debug("Third read should prefetch again, as we removed one block for the file.");
readStoreFile(storeFile);
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java
index 72a3ad044c3..736560e18cb 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java
@@ -95,6 +95,8 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProc
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetCachedFilesListRequest;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetCachedFilesListResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;
@@ -694,6 +696,12 @@ class MockRegionServer implements AdminProtos.AdminService.BlockingInterface,
return null;
}
+ @Override
+ public GetCachedFilesListResponse getCachedFilesList(RpcController controller,
+ GetCachedFilesListRequest request) throws ServiceException {
+ return null;
+ }
+
@Override
public GetSpaceQuotaSnapshotsResponse getSpaceQuotaSnapshots(RpcController controller,
GetSpaceQuotaSnapshotsRequest request) throws ServiceException {
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.java
index 183efd6288a..76deb6fdd6a 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.java
@@ -898,6 +898,14 @@ public class ThriftAdmin implements Admin {
throw new NotImplementedException("Truncate Region Async not supported in ThriftAdmin");
}
+ /**
+ * Get the list of cached files
+ */
+ @Override
+ public List<String> getCachedFilesList(ServerName serverName) {
+ throw new NotImplementedException("getCachedFilesList not supported in ThriftAdmin");
+ }
+
@Override
public void splitRegion(byte[] regionName, byte[] splitPoint) {
throw new NotImplementedException("splitRegion not supported in ThriftAdmin");