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

Edward Capriolo commented on CASSANDRA-1311:
--------------------------------------------

I think the work to pick a trigger master is really awesome. Great job, hard 
problem to solve. I think different people want different things from triggers. 

The 'internal developers' might want to be able to use triggers to build 
secondary indexes. They want triggers to happen close to the storage layer in 
most cases.

The 'external users' might want to be able to use triggers to replicate data to 
another system. They want triggers to be on the coordinating node.  

What I am proposing is we recognize this and implement two types of triggers. 
The trigger for 'external users' is the easiest and should be done first.

ExternalTriggers have a PreHook and PostHook. External triggers happen on the 
coordinating node. For the post hook, if an operation succeeds at the client 
specified consistency level a success_trigger fires. If it does not succeed a 
failed_trigger fires.

The weirdness in external triggers comes from a write timing out on some but 
not all nodes. That write could succeed on some nodes but not on all. Read 
repair and hinted handoff could eventually fix this data. This would result in 
the failed trigger firing but the write eventually succeeding. I argue that 
this behaviour is undefined. Clients are "supposed" to replay failed writes 
until success. 

Now the fun part, since we can fire a trigger on both success and failure we 
could theoretically deal with the above weirdness by implementing a guaranteed 
hinted handoff trigger. This would be done by using the PostHook failed_trigger 
to delay and then retry the write. 

> Support (asynchronous) triggers
> -------------------------------
>
>                 Key: CASSANDRA-1311
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-1311
>             Project: Cassandra
>          Issue Type: New Feature
>          Components: Contrib
>            Reporter: Maxim Grinev
>             Fix For: 1.1
>
>         Attachments: HOWTO-PatchAndRunTriggerExample-update1.txt, 
> HOWTO-PatchAndRunTriggerExample.txt, ImplementationDetails-update1.pdf, 
> ImplementationDetails.pdf, trunk-967053.txt, trunk-984391-update1.txt, 
> trunk-984391-update2.txt
>
>
> Asynchronous triggers is a basic mechanism to implement various use cases of 
> asynchronous execution of application code at database side. For example to 
> support indexes and materialized views, online analytics, push-based data 
> propagation.
> Please find the motivation, triggers description and list of applications:
> http://maxgrinev.com/2010/07/23/extending-cassandra-with-asynchronous-triggers/
> An example of using triggers for indexing:
> http://maxgrinev.com/2010/07/23/managing-indexes-in-cassandra-using-async-triggers/
> Implementation details are attached.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to