[ https://issues.apache.org/jira/browse/HBASE-28451?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
ConfX updated HBASE-28451: -------------------------- Description: *1. What happened* After setting `hfile.block.cache.policy=AdaptiveLRU`, running test `org.apache.hadoop.hbase.io.hfile.TestCacheConfig#testBucketCacheConfigL1L2Setup` results in a casting error. *2. Where's the problem* In`PooledRemoteClient`: {code:java} FirstLevelBlockCache lbc = cbc.l1Cache; ... // Force evictions by putting in a block too big. final long justTooBigSize = ((LruBlockCache) lbc).acceptableSize() + 1;{code} However, lbc does not necessarily need to be a LruBlockCache, leading to a potential `ClassCastException` *3. How to reproduce* 1. set `hfile.block.cache.policy` to `AdaptiveLRU ` 2. run `org.apache.hadoop.hbase.io.hfile.TestCacheConfig#testBucketCacheConfigL1L2Setup` you should observe {code:java} 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){code} We would like to provide a patch if this is confirmed. was: *1. What happened* After setting `hfile.block.cache.policy=AdaptiveLRU`, running test `org.apache.hadoop.hbase.io.hfile.TestCacheConfig#testBucketCacheConfigL1L2Setup` results in a casting error. *2. 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` *3. 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) ``` We would like to provide a patch if this is confirmed. > Cast without checking in TestCacheConfig > ---------------------------------------- > > Key: HBASE-28451 > URL: https://issues.apache.org/jira/browse/HBASE-28451 > Project: HBase > Issue Type: Bug > Reporter: ConfX > Priority: Major > > *1. What happened* > After setting `hfile.block.cache.policy=AdaptiveLRU`, running test > `org.apache.hadoop.hbase.io.hfile.TestCacheConfig#testBucketCacheConfigL1L2Setup` > results in a casting error. > > *2. Where's the problem* > In`PooledRemoteClient`: > {code:java} > FirstLevelBlockCache lbc = cbc.l1Cache; > ... > // Force evictions by putting in a block too big. > final long justTooBigSize = ((LruBlockCache) lbc).acceptableSize() + > 1;{code} > However, lbc does not necessarily need to be a LruBlockCache, leading to a > potential `ClassCastException` > > *3. How to reproduce* > 1. set `hfile.block.cache.policy` to `AdaptiveLRU ` > 2. run > `org.apache.hadoop.hbase.io.hfile.TestCacheConfig#testBucketCacheConfigL1L2Setup` > you should observe > {code:java} > 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){code} > > We would like to provide a patch if this is confirmed. -- This message was sent by Atlassian Jira (v8.20.10#820010)