无法在cassandra上为表创建触发器

时间:2016-07-19 09:46:40

标签: triggers cassandra

我尝试了2.2.6(docker图像)的cassandra版本和3.7(最新版本,而不是docker)。当我为表创建触发器时,它们都会报告相同的问题。

Exception when creating cassandra trigger

```

package com.ttData.triggers;

import ...

public class DataTrigger implements ITrigger {
private Properties properties = loadProperties();

@Autowired
private KafkaTemplate<Integer, String> kafkaTemplate;

private static AtomicInteger index = new AtomicInteger(1);

@Override
public Collection<Mutation> augment(Partition update) {
    ...
    return Collections.singletonList(audit.build());
}


private static Properties loadProperties()
{
    ...
    return properties;
}

} ```

2 个答案:

答案 0 :(得分:0)

您应该使用单引号而不是className

的双引号

cqlsh:test> CREATE TRIGGER myTrigger on mytable using "className"; 
SyntaxException: <ErrorMessage code=2000 [Syntax error in CQL query] message="line 1:42 mismatched input 'className' expecting STRING_LITERAL (...TRIGGER myTrigger on mytable using ["classNam]e";)">
cqlsh:test> 
cqlsh:test> CREATE TRIGGER myTrigger on mytable using 'className'; 
ConfigurationException: <ErrorMessage code=2300 [Query invalid because of configuration issue] message="Trigger class 'className' doesn't exist">

答案 1 :(得分:0)

调试cassandra源代码后,我认为这是一个错误。

即使触发器目录和触发器类都正确,它仍然可以报告触发器类不存在的错误。

原因是创建触发器的工作线程不是一个安全线程,应由cassandra的SecurityManager管理并属于SecurityThreadGroup。因此,在验证安全性失败时会抛出异常。