由带有Java 11的Cassandra maven插件启动时,Cassandra 3.11在Windows 10上崩溃

e0bqpujr  于 2022-09-27  发布在  Java
关注(0)|答案(2)|浏览(197)

我在maven verify中进行了集成测试,它启动了Apache Cassandra 3.11.13。我正在使用e1d1e3.7。我尝试将项目移动到Java 11。在将Java 11 vm选项添加到cassandra-maven-plugin后:

<plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cassandra-maven-plugin</artifactId>
                <configuration>    
                    <addJdk11Options>${runningJava11}</addJdk11Options>
                    .....

我让Cassandra从Linux开始,但在Windows上崩溃了,不幸的是没有日志。

bkhjykvo

bkhjykvo1#

我能够创建cassandra-maven-plugin使用的相同JVM参数,但将slf4j-jdk14-1.7.32.jar添加到类路径中。启动mvn -X时可以打印JVM参数,但类路径和主类可以在git\software-app\target\cassandra\bin\cassandri中找到。cassandra-maven-plugin Package 的jar。在日志中我发现了这个错误:在这里输入代码2022年8月20日9:32:12 PM org.apache.cassandra.service。DefaultFSErrorHandler handleStartupFSError SEVERE:由于启动时文件系统异常,磁盘故障策略“停止”,强制退出

Aug 20, 2022 9:32:12 PM org.apache.cassandra.service.DefaultFSErrorHandler handleStartupFSError
SEVERE: Exiting forcefully due to file system exception on startup, disk failure policy "stop"
FSWriteError in C:\Users\pesho\git\software-app\target\cassandra\data\system\local-7ad54392bcdd35a684174e047860b377\me-8-big-Data.db
        at org.apache.cassandra.db.lifecycle.LogTransaction.delete(LogTransaction.java:261)
        at org.apache.cassandra.db.lifecycle.LogTransaction$SSTableTidier.run(LogTransaction.java:386)
        at org.apache.cassandra.io.sstable.format.SSTableReader$GlobalTidy.tidy(SSTableReader.java:2333)
        at org.apache.cassandra.utils.concurrent.Ref$GlobalState.release(Ref.java:326)
        at org.apache.cassandra.utils.concurrent.Ref$State.release(Ref.java:225)
        at org.apache.cassandra.utils.concurrent.Ref.release(Ref.java:119)
        at org.apache.cassandra.io.sstable.format.SSTableReader$InstanceTidier$1.run(SSTableReader.java:2238)
        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.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
        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:84)

        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.nio.file.AccessDeniedException: C:\Users\pesho\git\software-app\target\cassandra\data\system\local-7ad54392bcdd35a684174e047860b377\me-8-big-Data.db
        at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:89)
        at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
        at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
        at java.base/sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:274)
        at java.base/sun.nio.fs.AbstractFileSystemProvider.delete(AbstractFileSystemProvider.java:105)
        at java.base/java.nio.file.Files.delete(Files.java:1142)
        at org.apache.cassandra.db.lifecycle.LogTransaction.delete(LogTransaction.java:243)
        ... 13 more

Cassandra似乎正在试图删除一个仍处于打开状态的文件。在修改target/cassandra/conf/cassandra.yaml后,我通过设置以下内容启动了Cassandra:

disk_failure_policy: ignore

因为这是一个只测试的示例,所以我决定,我可以接受这个选项。不幸的是,这个yaml文件是由cassandra-maven-plugin生成的。在深入研究插件代码之后,我找到了yaml参数,它合并了pom中的配置。xml和默认配置文件:

<plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cassandra-maven-plugin</artifactId>
                <configuration>
                    <!-- required to start on Windows -->
                    <yaml>disk_failure_policy: ignore</yaml>    
                    <addJdk11Options>${runningJava11}</addJdk11Options>
                    .....
zf9nrax1

zf9nrax12#

Cassandra使用的Java文件I/O库在Windows上一直存在问题,尤其是在NTFS上。对于用户来说,这一直是一个问题的来源,我们认为继续支持项目是不好的(参见discussion in this thread)。
我们最终在Cassandra 4.0(CASSANDRA-16171)中完全放弃了Windows支持。
此外,Cassandra 3.1x(及更早版本)仅适用于Java 8(请参见Cassandra installation prerequisites)。Cassandra 4.0.2最近才添加了对Java 11的完全支持(以前是实验性的)(CASSANDRA-16894)。这意味着C*4.x可以与Java8或Java11一起工作。
建议Windows用户的解决方法是:

否则,如果你只想学习如何在Cassandra上构建应用程序,Astra DB有一个免费层,你只需点击5次即可启动集群。干杯

相关问题