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

Jordan West updated CASSANDRA-16002:
------------------------------------
    Reviewers: Jordan West, Jordan West  (was: Jordan West)
               Jordan West, Jordan West
       Status: Review In Progress  (was: Patch Available)

+1 LGTM. For 3.0/3.11 moving the logging line above the stability inspector 
call makes sense because the JVM can be killed before reaching the log line. 
For trunk, logging the exceptions for additional information also makes sense. 

> jvm upgrade dtests fail on java 11 caused by bad initialization order of 
> DatabaseDescriptor and FileUtils
> ---------------------------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-16002
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-16002
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Test/dtest
>            Reporter: David Capwell
>            Assignee: David Capwell
>            Priority: Normal
>             Fix For: 3.0.x, 3.11.x, 4.0-beta
>
>
> In FileUtils we check to see if we have access to some classes (specifically 
> to set org.apache.cassandra.io.util.FileUtils#isCleanerAvailable), which can 
> fail in java 11.  This is fine with CassandraDaemon as it will just log the 
> failure, but in in-jvm dtests this can fail to startup an instance with the 
> following
> {code}
> java.lang.RuntimeException: java.lang.RuntimeException: 
> java.lang.AssertionError: network topology must be assigned before using 
> snitch
>       at 
> org.apache.cassandra.distributed.impl.IsolatedExecutor.waitOn(IsolatedExecutor.java:209)
>       at 
> org.apache.cassandra.distributed.impl.IsolatedExecutor.lambda$sync$7(IsolatedExecutor.java:112)
>       at 
> org.apache.cassandra.distributed.impl.Instance.startup(Instance.java:592)
>       at 
> org.apache.cassandra.distributed.impl.AbstractCluster$Wrapper.startup(AbstractCluster.java:209)
>       at 
> org.apache.cassandra.distributed.impl.AbstractCluster$Wrapper.startup(AbstractCluster.java:200)
>       at 
> org.apache.cassandra.distributed.upgrade.UpgradeTestBase$TestCase.run(UpgradeTestBase.java:179)
>       at 
> org.apache.cassandra.distributed.upgrade.UpgradeTest.upgradeTest(UpgradeTest.java:50)
>       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)
> Caused by: java.lang.RuntimeException: java.lang.AssertionError: network 
> topology must be assigned before using snitch
>       at 
> org.apache.cassandra.distributed.impl.Instance.lambda$startup$7(Instance.java:590)
>       at 
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
>       at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
>       at 
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
>       at 
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
>       at 
> org.apache.cassandra.concurrent.NamedThreadFactory.lambda$threadLocalDeallocator$0(NamedThreadFactory.java:83)
>       at java.base/java.lang.Thread.run(Thread.java:834)
> Caused by: java.lang.AssertionError: network topology must be assigned before 
> using snitch
>       at 
> org.apache.cassandra.distributed.impl.DistributedTestSnitch.getDatacenter(DistributedTestSnitch.java:90)
>       at 
> org.apache.cassandra.distributed.impl.DistributedTestSnitch.getDatacenter(DistributedTestSnitch.java:85)
>       at 
> org.apache.cassandra.locator.DynamicEndpointSnitch.getDatacenter(DynamicEndpointSnitch.java:118)
>       at 
> org.apache.cassandra.config.DatabaseDescriptor.applyConfig(DatabaseDescriptor.java:488)
>       at 
> org.apache.cassandra.config.DatabaseDescriptor.<clinit>(DatabaseDescriptor.java:137)
>       at 
> org.apache.cassandra.utils.JVMStabilityInspector.inspectThrowable(JVMStabilityInspector.java:102)
>       at 
> org.apache.cassandra.utils.JVMStabilityInspector.inspectThrowable(JVMStabilityInspector.java:60)
>       at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:78)
>       at 
> org.apache.cassandra.distributed.impl.Instance.lambda$startup$7(Instance.java:509)
> {code}
> The exception isn’t clear, but what is happening is the following
> {code}
> static
> {
>     boolean canClean = false;
>     try
>     {
>         ByteBuffer buf = ByteBuffer.allocateDirect(1);
>         ((DirectBuffer) buf).cleaner().clean();
>         canClean = true;
>     }
>     catch (Throwable t)
>     {
>         JVMStabilityInspector.inspectThrowable(t);
>         logger.info("Cannot initialize un-mmaper.  (Are you using a 
> non-Oracle JVM?)  Compacted data files will not be removed promptly.  
> Consider using an Oracle JVM or using standard disk access mode");
>     }
>     canCleanDirectBuffers = canClean;
> }
> {code}
> JVMStabilityInspector will check the throwable which will eventually call 
> org.apache.cassandra.config.DatabaseDescriptor#getDiskFailurePolicy which 
> will try to load the configs and fail



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to