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.