[
https://issues.apache.org/jira/browse/CASSANDRA-17850?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17743318#comment-17743318
]
shylaja kokoori commented on CASSANDRA-17850:
---------------------------------------------
Hi,
I have been doing some research for this ticket with Benjamin, these are my
observations,
1) NativeLibrary class, uses the file descriptor to work with file system cache
(via JNA->Libc)
2) Filechannel.force will flush all the data from the channel to storage. But
we also want to make sure the OS does not unnecessarily cache the data. This is
achieved currently by using functions in the NativeLibrary
My suggestion, FileChannel now has ExtendedOpenOption.DIRECT option to do
DirectIO which will bypass filesystem cache. This I believe will eliminate the
need to use file descriptors. Will this approach work?
> Find a way to get FileDescriptor.fd and sun.nio.ch.FileChannelImpl.fd without
> opening internals
> -----------------------------------------------------------------------------------------------
>
> Key: CASSANDRA-17850
> URL: https://issues.apache.org/jira/browse/CASSANDRA-17850
> Project: Cassandra
> Issue Type: Improvement
> Components: Build
> Reporter: Ekaterina Dimitrova
> Assignee: Benjamin Lerer
> Priority: Normal
> Fix For: 5.x
>
>
> With Java 17 if we do not add below to the jvm17 server options:
> {code:java}
> --add-opens java.base/sun.nio.ch=ALL-UNNAMED
> --add-opens java.base/java.io=ALL-UNNAMED{code}
> we get on startup (considering I comment out the scripted UDFs and apply a
> few changes to the startup scripts):
> {code:java}
> ERROR [ScheduledTasks:1] 2022-08-23 12:29:25,652
> JVMStabilityInspector.java:68 - Exception in thread
> Thread[ScheduledTasks:1,5,ScheduledTasks]
> java.lang.AssertionError: java.lang.reflect.InaccessibleObjectException:
> Unable to make field private int java.io.FileDescriptor.fd accessible: module
> java.base does not "opens java.io" to unnamed module @11d8ae8b
> at
> org.apache.cassandra.utils.FBUtilities.getProtectedField(FBUtilities.java:801)
> at org.apache.cassandra.utils.NativeLibrary.<clinit>(NativeLibrary.java:84)
> at org.apache.cassandra.utils.TimeUUID$Generator.hash(TimeUUID.java:496)
> at org.apache.cassandra.utils.TimeUUID$Generator.makeNode(TimeUUID.java:474)
> at
> org.apache.cassandra.utils.TimeUUID$Generator.makeClockSeqAndNode(TimeUUID.java:452)
> at org.apache.cassandra.utils.TimeUUID$Generator.<clinit>(TimeUUID.java:368)
> at
> org.apache.cassandra.streaming.StreamingState.<clinit>(StreamingState.java:50)
> at org.apache.cassandra.streaming.StreamManager.<init>(StreamManager.java:257)
> at
> org.apache.cassandra.streaming.StreamManager.<clinit>(StreamManager.java:58)
> at org.apache.cassandra.service.StorageService.<init>(StorageService.java:376)
> at
> org.apache.cassandra.service.StorageService.<clinit>(StorageService.java:226)
> at
> org.apache.cassandra.locator.DynamicEndpointSnitch.updateScores(DynamicEndpointSnitch.java:274)
> at
> org.apache.cassandra.locator.DynamicEndpointSnitch$1.run(DynamicEndpointSnitch.java:91)
> at
> org.apache.cassandra.concurrent.ExecutionFailure$1.run(ExecutionFailure.java:133)
> at
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
> at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
> at
> java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
> at
> io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
> at java.base/java.lang.Thread.run(Thread.java:833)
> Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make
> field private int java.io.FileDescriptor.fd accessible: module java.base does
> not "opens java.io" to unnamed module @11d8ae8b
> at
> java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
> at
> java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
> at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:178)
> at java.base/java.lang.reflect.Field.setAccessible(Field.java:172)
> at
> org.apache.cassandra.utils.FBUtilities.getProtectedField(FBUtilities.java:796)
> ... 20 common frames omitted
> {code}
> and
> {code:java}
> ERROR [ScheduledTasks:1] 2022-08-23 12:31:18,443
> JVMStabilityInspector.java:68 - Exception in thread
> Thread[ScheduledTasks:1,5,ScheduledTasks]
> java.lang.AssertionError: java.lang.reflect.InaccessibleObjectException:
> Unable to make field private final java.io.FileDescriptor
> sun.nio.ch.FileChannelImpl.fd accessible: module java.base does not "opens
> sun.nio.ch" to unnamed module @4c012563
> at
> org.apache.cassandra.utils.FBUtilities.getProtectedField(FBUtilities.java:801)
> at org.apache.cassandra.utils.NativeLibrary.<clinit>(NativeLibrary.java:87)
> at org.apache.cassandra.utils.TimeUUID$Generator.hash(TimeUUID.java:496)
> at org.apache.cassandra.utils.TimeUUID$Generator.makeNode(TimeUUID.java:474)
> at
> org.apache.cassandra.utils.TimeUUID$Generator.makeClockSeqAndNode(TimeUUID.java:452)
> at org.apache.cassandra.utils.TimeUUID$Generator.<clinit>(TimeUUID.java:368)
> at
> org.apache.cassandra.streaming.StreamingState.<clinit>(StreamingState.java:50)
> at org.apache.cassandra.streaming.StreamManager.<init>(StreamManager.java:257)
> at
> org.apache.cassandra.streaming.StreamManager.<clinit>(StreamManager.java:58)
> at org.apache.cassandra.service.StorageService.<init>(StorageService.java:376)
> at
> org.apache.cassandra.service.StorageService.<clinit>(StorageService.java:226)
> at
> org.apache.cassandra.locator.DynamicEndpointSnitch.updateScores(DynamicEndpointSnitch.java:274)
> at
> org.apache.cassandra.locator.DynamicEndpointSnitch$1.run(DynamicEndpointSnitch.java:91)
> at
> org.apache.cassandra.concurrent.ExecutionFailure$1.run(ExecutionFailure.java:133)
> at
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
> at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
> at
> java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
> at
> io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
> at java.base/java.lang.Thread.run(Thread.java:833)
> Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make
> field private final java.io.FileDescriptor sun.nio.ch.FileChannelImpl.fd
> accessible: module java.base does not "opens sun.nio.ch" to unnamed module
> @4c012563
> at
> java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
> at
> java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
> at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:178)
> at java.base/java.lang.reflect.Field.setAccessible(Field.java:172)
> at
> org.apache.cassandra.utils.FBUtilities.getProtectedField(FBUtilities.java:796)
> ... 20 common frames omitted
> {code}
>
> *EDIT:*
> -Also adding-
> {code:java}
> --add-opens java.base/java.nio=ALL-UNNAMED{code}
> -to prevent below error on startup with JDK17:-
> {code:java}
> Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make
> field private final java.io.FileDescriptor java.nio.MappedByteBuffer.fd
> accessible: module java.base does not "opens java.nio" to unnamed module
> @934b6cb
> at
> java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
> at
> java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
> at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:178)
> at java.base/java.lang.reflect.Field.setAccessible(Field.java:172)
> at org.apache.cassandra.utils.SyncUtil.<clinit>(SyncUtil.java:58)
> ... 29 common frames omitted
> {code}
> *CASSANDRA-17909 handled this one*
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]