java - Cassandra Java客户端: AccessControlException: access denied on "C:\Program Files\DataStax-DDC\apache-cassandra\conf\logback.xml" "read")

标签 java cassandra

在 Windows 上,使用 Cassandra Java 驱动程序时,我有时会在 Cassandra 安装目录中的 logback.xml 文件上收到 AccessControlException。我实际上使用的是 log4j,而不是 logback。

该查询适用于小型数据集,但在大型数据集上会失败并出现 CodecNotFoundException。

AccessControlException 实际上可能掩盖了另一个异常(例如超时)。

1) 为什么客户端首先要读取 logback 配置,为什么要从安装目录读取?

2) 如何为 logback 配置文件配置不同的搜索路径?

异常消息:

com.datastax.driver.core.exceptions.FunctionExecutionException: execution of 'average_by_source_1[avg_type_1, text, double]' failed: java.security.AccessControlException: access denied ("java.io.FilePermission" "C:\Program Files\DataStax-DDC\apache-cassandra\conf\logback.xml" "read")
        at com.datastax.driver.core.Responses$Error.asException(Responses.java:130)
        at com.datastax.driver.core.DefaultResultSetFuture.onSet(DefaultResultSetFuture.java:179)
        at com.datastax.driver.core.RequestHandler.setFinalResult(RequestHandler.java:174)
        at com.datastax.driver.core.RequestHandler.access$2600(RequestHandler.java:43)
        at com.datastax.driver.core.RequestHandler$SpeculativeExecution.setFinalResult(RequestHandler.java:793)
        at com.datastax.driver.core.RequestHandler$SpeculativeExecution.onSet(RequestHandler.java:627)
        at com.datastax.driver.core.Connection$Dispatcher.channelRead0(Connection.java:1012)
        at com.datastax.driver.core.Connection$Dispatcher.channelRead0(Connection.java:935)
        at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:328)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:321)
        at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:266)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:328)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:321)
        at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:328)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:321)
        at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:328)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:321)
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1280)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:328)
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:890)
        at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:564)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:505)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:419)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:391)
        at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:112)
        at java.lang.Thread.run(Unknown Source)

最佳答案

这是由这个 Cassandra bug 引起的

所发生的情况是 UDF 在没有文件访问权限的沙箱中运行。 Cassandra 使用的 logback 日志框架有时不时重新读取conf/logback.xml 文件的习惯。如果在 Cassandra 执行 UDF 时发生重新读取,则会出现此随机错误。

应在 3.10 中修复

作为 3.9 中的解决方法,您可以设置 <configuration scan="false">在/conf/logback.xml 的顶部,无需重新启动,因为它会在下次重新扫描时拾取它

关于java - Cassandra Java客户端: AccessControlException: access denied on "C:\Program Files\DataStax-DDC\apache-cassandra\conf\logback.xml" "read"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40392755/

相关文章:

尝试创建 Button 时抛出 JavaFX InitationTargetException

java - 线程 "main"com.google.gson.JsonSyntaxException : java. lang.NumberFormatException 中出现异常:空字符串

java - 如何在 GlassFish 中设置部署描述符以便运行 servlet 来代替欢迎页面?

java 添加图像到 Canvas

python - 从 cassandra 中选择随机行

database - 断开 Cassandra 中的节点

deployment - 如何部署对 Cassandra CQL 架构的更改

cassandra - Spring data cassandra - 创建名称为 'cassandraSession' : Invocation of init method failed 的 bean 时出错

java - C# 中的散列字符串不可读

cassandra - 如何在 cassandra 中进行同步删除并创建 key 空间?