Skip to content

Commit 6e07f26

Browse files
committed
HBASE-27794: Tooling for parsing/reading the prefetch files list file
1 parent 391dfda commit 6e07f26

File tree

15 files changed

+159
-1
lines changed

15 files changed

+159
-1
lines changed

hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2615,4 +2615,9 @@ List<LogEntry> getLogEntries(Set<ServerName> serverNames, String logType, Server
26152615
* Flush master local region
26162616
*/
26172617
void flushMasterStore() throws IOException;
2618+
2619+
/**
2620+
* Get the list of cached files
2621+
*/
2622+
List<String> getCachedFilesList(ServerName serverName) throws IOException;
26182623
}

hbase-client/src/main/java/org/apache/hadoop/hbase/client/AdminOverAsyncAdmin.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,4 +1115,9 @@ public List<LogEntry> getLogEntries(Set<ServerName> serverNames, String logType,
11151115
public void flushMasterStore() throws IOException {
11161116
get(admin.flushMasterStore());
11171117
}
1118+
1119+
@Override
1120+
public List<String> getCachedFilesList(ServerName serverName) throws IOException {
1121+
return get(admin.getCachedFilesList(serverName));
1122+
}
11181123
}

hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1837,4 +1837,9 @@ CompletableFuture<List<LogEntry>> getLogEntries(Set<ServerName> serverNames, Str
18371837
* Flush master local region
18381838
*/
18391839
CompletableFuture<Void> flushMasterStore();
1840+
1841+
/**
1842+
* Get the list of cached files
1843+
*/
1844+
CompletableFuture<List<String>> getCachedFilesList(ServerName serverName);
18401845
}

hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -990,4 +990,9 @@ public CompletableFuture<List<LogEntry>> getLogEntries(Set<ServerName> serverNam
990990
public CompletableFuture<Void> flushMasterStore() {
991991
return wrap(rawAdmin.flushMasterStore());
992992
}
993+
994+
@Override
995+
public CompletableFuture<List<String>> getCachedFilesList(ServerName serverName) {
996+
return wrap(rawAdmin.getCachedFilesList(serverName));
997+
}
993998
}

hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@
132132
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactionSwitchResponse;
133133
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;
134134
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;
135+
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetCachedFilesListRequest;
136+
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetCachedFilesListResponse;
135137
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;
136138
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;
137139
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;
@@ -4453,4 +4455,15 @@ Void> call(controller, stub, request.build(),
44534455
(s, c, req, done) -> s.flushMasterStore(c, req, done), resp -> null))
44544456
.call();
44554457
}
4458+
4459+
@Override
4460+
public CompletableFuture<List<String>> getCachedFilesList(ServerName serverName) {
4461+
GetCachedFilesListRequest.Builder request = GetCachedFilesListRequest.newBuilder();
4462+
return this.<List<String>> newAdminCaller()
4463+
.action((controller, stub) -> this.<GetCachedFilesListRequest, GetCachedFilesListResponse,
4464+
List<String>> adminCall(controller, stub, request.build(),
4465+
(s, c, req, done) -> s.getCachedFilesList(c, req, done),
4466+
resp -> resp.getCachedFilesList()))
4467+
.serverName(serverName).call();
4468+
}
44564469
}

hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@
153153
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;
154154
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearSlowLogResponses;
155155
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;
156+
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetCachedFilesListRequest;
157+
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetCachedFilesListResponse;
156158
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;
157159
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;
158160
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;
@@ -1780,6 +1782,21 @@ public static List<org.apache.hadoop.hbase.client.RegionInfo> getOnlineRegions(
17801782
return getRegionInfos(response);
17811783
}
17821784

1785+
/**
1786+
* Get the list of cached files
1787+
*/
1788+
public static List<String> getCachedFilesList(final RpcController controller,
1789+
final AdminService.BlockingInterface admin) throws IOException {
1790+
GetCachedFilesListRequest request = GetCachedFilesListRequest.newBuilder().build();
1791+
GetCachedFilesListResponse response = null;
1792+
try {
1793+
response = admin.getCachedFilesList(controller, request);
1794+
} catch (ServiceException se) {
1795+
throw getRemoteException(se);
1796+
}
1797+
return new ArrayList<>(response.getCachedFilesList());
1798+
}
1799+
17831800
/**
17841801
* Get the list of region info from a GetOnlineRegionResponse
17851802
* @param proto the GetOnlineRegionResponse

hbase-protocol-shaded/src/main/protobuf/server/region/Admin.proto

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,13 @@ message ExecuteProceduresRequest {
283283
message ExecuteProceduresResponse {
284284
}
285285

286+
message GetCachedFilesListRequest {
287+
}
288+
289+
message GetCachedFilesListResponse {
290+
repeated string cached_files = 1;
291+
}
292+
286293
/**
287294
* Slow/Large log (LogRequest) use-case specific RPC request. This request payload will be
288295
* converted in bytes and sent to generic RPC API: GetLogEntries
@@ -405,4 +412,7 @@ service AdminService {
405412
rpc GetLogEntries(LogRequest)
406413
returns(LogEntry);
407414

415+
rpc GetCachedFilesList(GetCachedFilesListRequest)
416+
returns(GetCachedFilesListResponse);
417+
408418
}

hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1936,4 +1936,19 @@ public static Optional<BucketCache> getBuckedCacheFromCacheConfig(CacheConfig ca
19361936
return Optional.empty();
19371937
}
19381938

1939+
public List<String> getCachedFilesList() throws IOException {
1940+
List<String> tmp = new ArrayList<>();
1941+
File persistedFile = new File(persistencePath);
1942+
try (FileInputStream fis = new FileInputStream(persistedFile)) {
1943+
if (fis.skip(ProtobufMagic.lengthOfPBMagic()) != ProtobufMagic.lengthOfPBMagic()) {
1944+
throw new IOException(
1945+
"Incorrect number of bytes read while checking for protobuf magic number");
1946+
}
1947+
BucketCacheProtos.BucketCacheEntry proto =
1948+
BucketCacheProtos.BucketCacheEntry.parseDelimitedFrom(fis);
1949+
tmp.addAll(proto.getPrefetchedFilesMap().keySet());
1950+
}
1951+
return tmp;
1952+
}
1953+
19391954
}

hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@
164164
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;
165165
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;
166166
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;
167+
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetCachedFilesListRequest;
168+
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetCachedFilesListResponse;
167169
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;
168170
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;
169171
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;
@@ -3563,6 +3565,11 @@ public ExecuteProceduresResponse executeProcedures(RpcController controller,
35633565
throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));
35643566
}
35653567

3568+
public GetCachedFilesListResponse getCachedFilesList(RpcController controller,
3569+
GetCachedFilesListRequest request) throws ServiceException {
3570+
throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));
3571+
}
3572+
35663573
@Override
35673574
public GetLiveRegionServersResponse getLiveRegionServers(RpcController controller,
35683575
GetLiveRegionServersRequest request) throws ServiceException {

hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,9 @@
108108
import org.apache.hadoop.hbase.http.InfoServer;
109109
import org.apache.hadoop.hbase.io.hfile.BlockCache;
110110
import org.apache.hadoop.hbase.io.hfile.BlockCacheFactory;
111+
import org.apache.hadoop.hbase.io.hfile.CombinedBlockCache;
111112
import org.apache.hadoop.hbase.io.hfile.HFile;
113+
import org.apache.hadoop.hbase.io.hfile.bucket.BucketCache;
112114
import org.apache.hadoop.hbase.io.util.MemorySizeUtil;
113115
import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;
114116
import org.apache.hadoop.hbase.ipc.RpcClient;
@@ -3324,6 +3326,21 @@ public Optional<BlockCache> getBlockCache() {
33243326
return Optional.ofNullable(this.blockCache);
33253327
}
33263328

3329+
public Optional<BucketCache> getBucketCacheIfPresent() {
3330+
if (getBlockCache().isPresent()) {
3331+
BlockCache bc = getBlockCache().get();
3332+
if (bc instanceof CombinedBlockCache) {
3333+
BlockCache l2 = ((CombinedBlockCache) bc).getSecondLevelCache();
3334+
if (l2 instanceof BucketCache) {
3335+
return Optional.of((BucketCache) l2);
3336+
}
3337+
} else if (bc instanceof BucketCache) {
3338+
return Optional.of((BucketCache) bc);
3339+
}
3340+
}
3341+
return Optional.empty();
3342+
}
3343+
33273344
/**
33283345
* May be null if this is a master which not carry table.
33293346
* @return The cache for mob files used by the regionserver.

0 commit comments

Comments
 (0)