Hi,

I am thinking of using the Cassandra trigger to delete or update data right
after they are inserted.

First, I tried deleting the data.

This is my table.

```
CREATE TABLE mykeyspace.mytable (
    mycolumn text PRIMARY KEY
)
```

and this is my trigger

```
public class MyTrigger implements ITrigger {
  public Collection<Mutation> augment(Partition partition) {
    Collection<Mutation> mutations = Collections.emptySet();

    PartitionUpdate.SimpleBuilder partitionUpdateBuilder = Mutation
        .simpleBuilder(partition.metadata().ksName,
partition.partitionKey())
        .update(partition.metadata());

    Row.SimpleBuilder rowBuilder =
partitionUpdateBuilder.row(Clustering.EMPTY);

    rowBuilder.delete();

    Mutation mutation = partitionUpdateBuilder.buildAsMutation();

    mutations.add(mutation);

    return mutations;
  }
}
```

then, I got this error message (/var/log/cassandra/system.log) at run-time.


```
ERROR [Native-Transport-Requests-1] 2021-09-28 06:49:12,748
ErrorMessage.java:384 - Unexpected exception during request
java.lang.RuntimeException: Exception while executing trigger on table with
ID: 27a4dfa0-2028-11ec-a91c-6d2c86545d91
        at
org.apache.cassandra.triggers.TriggerExecutor.executeInternal(TriggerExecutor.java:246)
~[apache-cassandra-3.11.11.jar:3.11.11]
        at
org.apache.cassandra.triggers.TriggerExecutor.execute(TriggerExecutor.java:124)
~[apache-cassandra-3.11.11.jar:3.11.11]
        at
org.apache.cassandra.service.StorageProxy.mutateWithTriggers(StorageProxy.java:957)
~[apache-cassandra-3.11.11.jar:3.11.11]
        at
org.apache.cassandra.cql3.statements.ModificationStatement.executeWithoutCondition(ModificationStatement.java:435)
~[apache-cassandra-3.11.11.jar:3.11.11]
        at
org.apache.cassandra.cql3.statements.ModificationStatement.execute(ModificationStatement.java:421)
~[apache-cassandra-3.11.11.jar:3.11.11]
        at
org.apache.cassandra.cql3.QueryProcessor.processStatement(QueryProcessor.java:225)
~[apache-cassandra-3.11.11.jar:3.11.11]
        at
org.apache.cassandra.cql3.QueryProcessor.processPrepared(QueryProcessor.java:532)
~[apache-cassandra-3.11.11.jar:3.11.11]
        at
org.apache.cassandra.cql3.QueryProcessor.processPrepared(QueryProcessor.java:509)
~[apache-cassandra-3.11.11.jar:3.11.11]
        at
org.apache.cassandra.transport.messages.ExecuteMessage.execute(ExecuteMessage.java:146)
~[apache-cassandra-3.11.11.jar:3.11.11]
        at
org.apache.cassandra.transport.Message$Dispatcher.processRequest(Message.java:687)
[apache-cassandra-3.11.11.jar:3.11.11]
        at
org.apache.cassandra.transport.Message$Dispatcher.lambda$channelRead0$0(Message.java:593)
[apache-cassandra-3.11.11.jar:3.11.11]
        at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
~[na:1.8.0_302]
        at
org.apache.cassandra.concurrent.AbstractLocalAwareExecutorService$FutureTask.run(AbstractLocalAwareExecutorService.java:162)
~[apache-cassandra-3.11.11.jar:3.11.11]
        at
org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:113)
~[apache-cassandra-3.11.11.jar:3.11.11]
        at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_302]
Caused by: java.lang.UnsupportedOperationException: null
        at java.util.AbstractCollection.add(AbstractCollection.java:262)
~[na:1.8.0_302]
        at MyTrigger.augment(MyTrigger.java:26) ~[na:na]
        at
org.apache.cassandra.triggers.TriggerExecutor.executeInternal(TriggerExecutor.java:234)
~[apache-cassandra-3.11.11.jar:3.11.11]
        ... 14 common frames omitted
```

I guess I made a mistake in my trigger implementation.
Not sure if it is the correct way to do that.

Could you give me some advice?

Thank you.

Reply via email to