[ 
https://issues.apache.org/jira/browse/GEODE-9466?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Darrel Schneider reassigned GEODE-9466:
---------------------------------------

    Assignee: Darrel Schneider

> ByteBufferInputStream.OffHeapByteSource fails on Java 16 and later
> ------------------------------------------------------------------
>
>                 Key: GEODE-9466
>                 URL: https://issues.apache.org/jira/browse/GEODE-9466
>             Project: Geode
>          Issue Type: Bug
>          Components: offheap
>            Reporter: Darrel Schneider
>            Assignee: Darrel Schneider
>            Priority: Major
>              Labels: Java16, Java17
>
> ByteBufferInputStream.OffHeapByteSource has a method determineUnaligned that 
> will always fail on java 16 and later. This is because it calls 
> Method.setAccessible which is not allowed under normal conditions starting 
> with java 16 (see: 
> [https://softwaregarden.dev/en/posts/new-java/illegal-access-in-java-16]).
> The method is called when the class is loaded so it will cause the class load 
> to fail. It tries to handle exceptions on return false but the exception java 
> 16 throws is a RuntimeException and that is not caught. The exception it will 
> fail with is java.lang.reflect.InaccessibleObjectException.
> A workaround for this bug is to start the jvm with  --illegal-access=permit
> This causes ByteBufferInputStream to do a bunch of its work a byte at a time 
> instead of using the optimal multi-byte methods like readShort, readInt, and 
> readLong.
> It would be simple to change determineUnaligned to catch RuntimeException 
> from setAccessible and then to read the "os.arch" system property and if it 
> is any of the following to return true:
> {code:java}
> arch.equals("i386") || arch.equals("x86")
>  || arch.equals("amd64") || arch.equals("x86_64")
>  || arch.equals("ppc64") || arch.equals("ppc64le")
> {code}
> This is what the Bits class does in jdk 8. In jdk 16 this logic has moved to 
> UnsafeConstants and its value is injected by the JVM so it is unclear if the 
> list has grown.



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to