[
https://issues.apache.org/jira/browse/HBASE-29234?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Istvan Toth resolved HBASE-29234.
---------------------------------
Fix Version/s: 2.7.0
3.0.0-beta-2
2.6.3
2.5.12
Resolution: Fixed
Committed to all active branches.
Thanks for the review [~zhangduo] .
> Handle java.lang.reflect.InaccessibleObjectException in HFileSystem
> -------------------------------------------------------------------
>
> Key: HBASE-29234
> URL: https://issues.apache.org/jira/browse/HBASE-29234
> Project: HBase
> Issue Type: Bug
> Reporter: Istvan Toth
> Assignee: Istvan Toth
> Priority: Major
> Labels: pull-request-available
> Fix For: 2.7.0, 3.0.0-beta-2, 2.6.3, 2.5.12
>
>
> This is from the Hadoop test suite, but the problem is in HBase:
> {noformat}
> [ERROR]
> org.apache.hadoop.yarn.server.timelineservice.storage.TestTimelineReaderHBaseDown.testTimelineReaderDetectsHBaseDown
> Time elapsed: 0.282 s <<< ERROR!
> java.lang.reflect.InaccessibleObjectException: Unable to make private native
> java.lang.reflect.Field[] java.lang.Class.getDeclaredFields0(boolean)
> accessible: module java.base does not "opens java.lang" to unnamed module
> @541e4305
> at
> java.base/java.lang.reflect.AccessibleObject.throwInaccessibleObjectException(AccessibleObject.java:353)
> at
> java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:329)
> at
> java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:277)
> at
> java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:182)
> at java.base/java.lang.reflect.Method.setAccessible(Method.java:176)
> at
> org.apache.hadoop.hbase.util.ReflectionUtils.getModifiersField(ReflectionUtils.java:286)
> at
> org.apache.hadoop.hbase.fs.HFileSystem.addLocationsOrderInterceptor(HFileSystem.java:326)
> at
> org.apache.hadoop.hbase.fs.HFileSystem.addLocationsOrderInterceptor(HFileSystem.java:285)
> at org.apache.hadoop.hbase.fs.HFileSystem.<init>(HFileSystem.java:96)
> at org.apache.hadoop.hbase.fs.HFileSystem.get(HFileSystem.java:453)
> {noformat}
> Due to JEP416, we are no longer able to set the LocationsOrderInterceptor on
> JDK18+.
> While the code is supposed to catch these instances and still work (just not
> optimally), it does not catch InaccessibleObjectException.
> Catching InaccessibleObjectException is not real fix, but it allows for
> running with JDK18+.
> The real fix would either be avoiding reflection for this (which probably
> requires Hadoop support), or using the sanity-draining workaround for JEP416
> which floats around on stackoverflow.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)