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)

Reply via email to