[ 
https://issues.apache.org/jira/browse/CASSANDRA-12242?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15391250#comment-15391250
 ] 

RocWay Li commented on CASSANDRA-12242:
---------------------------------------

TriggerExecutor is a singleton, but the trigger classes are NOT loaded at 
startup. They are loaded just at the first try to create triggers, when the 
first time the TriggerExecutor.instance is called. And, sure, the trigger jar 
exists at the right place, <path_to_cassandra/conf/triggers/>.
The failure does happen at 
ThreadAwareSecurityManager.isSecuredThread(ThreadAwareSecurityManager.java:145)

*if (!(tg instanceof SecurityThreadGroup))*
*return false*;

Refer to the following complete call-stack, please:
"Native-Transport-Requests-1@14162" daemon prio=5 tid=0x52 nid=NA runnable
  java.lang.Thread.State: RUNNABLE
          at 
org.apache.cassandra.cql3.functions.ThreadAwareSecurityManager.isSecuredThread(ThreadAwareSecurityManager.java:145)
          at 
org.apache.cassandra.cql3.functions.ThreadAwareSecurityManager.checkPermission(ThreadAwareSecurityManager.java:179)
          at 
java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1294)
          at java.lang.System.getProperty(System.java:717)
          at java.io.WinNTFileSystem.getUserPath(WinNTFileSystem.java:346)
          at java.io.WinNTFileSystem.resolve(WinNTFileSystem.java:309)
          at java.io.File.getCanonicalPath(File.java:618)
          at java.io.FilePermission$1.run(FilePermission.java:215)
          at java.io.FilePermission$1.run(FilePermission.java:203)
          at 
java.security.AccessController.doPrivileged(AccessController.java:-1)
          at java.io.FilePermission.init(FilePermission.java:203)
          at java.io.FilePermission.<init>(FilePermission.java:277)
          at java.lang.SecurityManager.checkRead(SecurityManager.java:888)
          at java.io.File.exists(File.java:814)
          at 
org.apache.cassandra.utils.FBUtilities.cassandraTriggerDir(FBUtilities.java:325)
          at 
org.apache.cassandra.triggers.TriggerExecutor.reloadClasses(TriggerExecutor.java:60)
          at 
org.apache.cassandra.triggers.TriggerExecutor.<init>(TriggerExecutor.java:51)
          at 
org.apache.cassandra.triggers.TriggerExecutor.<clinit>(TriggerExecutor.java:43)
          at 
org.apache.cassandra.cql3.statements.CreateTriggerStatement.validate(CreateTriggerStatement.java:67)
          at 
org.apache.cassandra.cql3.QueryProcessor.processStatement(QueryProcessor.java:212)
          at 
org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:245)
          at 
org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:230)
          at 
org.apache.cassandra.transport.messages.QueryMessage.execute(QueryMessage.java:115)
          at 
org.apache.cassandra.transport.Message$Dispatcher.channelRead0(Message.java:507)
          at 
org.apache.cassandra.transport.Message$Dispatcher.channelRead0(Message.java:401)
          at 
io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
          at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
          at 
io.netty.channel.AbstractChannelHandlerContext.access$600(AbstractChannelHandlerContext.java:35)
          at 
io.netty.channel.AbstractChannelHandlerContext$7.run(AbstractChannelHandlerContext.java:357)
          at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
          at 
org.apache.cassandra.concurrent.AbstractLocalAwareExecutorService$FutureTask.run(AbstractLocalAwareExecutorService.java:162)
          at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:111)
          at java.lang.Thread.run(Thread.java:745)

> Could not create trigger
> ------------------------
>
>                 Key: CASSANDRA-12242
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-12242
>             Project: Cassandra
>          Issue Type: Bug
>          Components: CQL
>            Reporter: RocWay Li
>         Attachments: DataTrigger.java
>
>
> I tried cassandra 2.2.6 and 3.7, both of them could not create triggers.
> It reports that the trigger class doesn't exist. But it actually does and is 
> at the right directory, the conf/triggers.
> I debugged the source code, and I found that SEPWorker is used to create 
> triggers, but it's thread is not a secure thread, which should be managed by 
> cassandra's SecurityManager and belongs to SecurityThreadGroup.
> When security validation failed, an exception will be thrown. That's direct 
> cause for creating triggers failed.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to