You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Matt Stump (JIRA)" <ji...@apache.org> on 2015/05/04 21:26:08 UTC

[jira] [Commented] (CASSANDRA-9193) Facility to write dynamic code to selectively trigger trace or log for queries

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

Matt Stump commented on CASSANDRA-9193:
---------------------------------------

I spent some time exploring hanging a JS REPL off of C* last night to see if that what I could do in terms of dynamically rewriting functionality of a running StorageProxy. I can interrogate or modify variables, and call methods, but I can't dynamically rewrite code. I think this may be a JVM limitation. I can extend a Java class overriding a method, but I can't modify the method of an already instantiated object unless it was already being resolved via invoke dynamic (I think). We could still have a JS REPL, but it's usefulness is limited. The vision of having the power of something like a Lisp or Erlang REPL hang off of the server process is mostly dead. 

So that leaves us with three possibilities, the known injection points as originally mentioned, the UDF route as outlined by [~slebresne], or a combination of the two.

> Facility to write dynamic code to selectively trigger trace or log for queries
> ------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-9193
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-9193
>             Project: Cassandra
>          Issue Type: New Feature
>            Reporter: Matt Stump
>
> I want the equivalent of dtrace for Cassandra. I want the ability to intercept a query with a dynamic script (assume JS) and based on logic in that script trigger the statement for trace or logging. 
> Examples 
> - Trace only INSERT statements to a particular CF. 
> - Trace statements for a particular partition or consistency level.
> - Log statements that fail to reach the desired consistency for read or write.
> - Log If the request size for read or write exceeds some threshold
> At some point in the future it would be helpful to also do things such as log partitions greater than X bytes or Z cells when performing compaction. Essentially be able to inject custom code dynamically without a reboot to the different stages of C*. 
> The code should be executed synchronously as part of the monitored task, but we should provide the ability to log or execute CQL asynchronously from the provided API.
> Further down the line we could use this functionality to modify/rewrite requests or tasks dynamically.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)