Cassandra会触发异步吗?

时间:2017-04-19 13:50:53

标签: cassandra

我正在测试cassandra触发器并实现了ITrigger接口。 如同票https://issues.apache.org/jira/browse/CASSANDRA-1311 似乎cassandra触发器应该是异步的,意味着在客户端进行插入后,客户端不应该等待触发器被执行。

但是我在Trigger中添加了15秒的睡眠,并且由于超时而导致插入操作失败。所以它似乎在等待触发完成其工作。

有没有办法让触发器工作asynch? (根据我读过的页面,它应该已经是异步的)

1 个答案:

答案 0 :(得分:2)

不,默认情况下,Cassandra会等待触发器执行。

但您可以使用QueryProcessor执行查询来更改它并运行到单独的线程中。请注意,如果执行此操作并触发执行失败,您将无法从主查询中知道触发器查询失败。

Cassandra 2.x的例子:

@Override
public Collection<Mutation> augment(ByteBuffer key, ColumnFamily update) {
     new Thread(new Runnable() {
        @Override
        public void run() {
            //build your own query from the ByteBuffer key and ColumnFamily  update
            Insert insert = QueryBuilder.insertInto("test_keyspace.test_table").value("id", 1).value("data", "Test");

            //execute query  
            QueryProcessor.process(insert.toString(), ConsistencyLevel.LOCAL_QUORUM);
        }
    }).start();
    return Collections.EMPTY_LIST;
}