ConfX created HBASE-28451:
-----------------------------
Summary: Cast without checking in TestCacheConfig
Key: HBASE-28451
URL: https://issues.apache.org/jira/browse/HBASE-28451
Project: HBase
Issue Type: Bug
Reporter: ConfX
## What happened
After setting `hfile.block.cache.policy=AdaptiveLRU`, running test
`org.apache.hadoop.hbase.io.hfile.TestCacheConfig#testBucketCacheConfigL1L2Setup`
results in a casting error.
## Where's the problem
In line 64 of `PooledRemoteClient`:
```java
FirstLevelBlockCache lbc = cbc.l1Cache;
...
// Force evictions by putting in a block too big.
final long justTooBigSize = ((LruBlockCache) lbc).acceptableSize() + 1;
```
However, lbc does not necessarily need to be a LruBlockCache, leading to a
potential `ClassCastException`
## How to reproduce
1. set `hfile.block.cache.policy` to `AdaptiveLRU `
2. run
`org.apache.hadoop.hbase.io.hfile.TestCacheConfig#testBucketCacheConfigL1L2Setup`
you should observe
```
java.lang.ClassCastException: class
org.apache.hadoop.hbase.io.hfile.LruAdaptiveBlockCache cannot be cast to class
org.apache.hadoop.hbase.io.hfile.LruBlockCache
(org.apache.hadoop.hbase.io.hfile.LruAdaptiveBlockCache and
org.apache.hadoop.hbase.io.hfile.LruBlockCache are in unnamed module of loader
'app')
at
org.apache.hadoop.hbase.io.hfile.TestCacheConfig.testBucketCacheConfigL1L2Setup(TestCacheConfig.java:342)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
```
--
This message was sent by Atlassian Jira
(v8.20.10#820010)