cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sylvain Lebresne (JIRA)" <>
Subject [jira] [Commented] (CASSANDRA-6659) Allow "intercepting" query by user provided custom classes
Date Fri, 21 Mar 2014 15:14:42 GMT


Sylvain Lebresne commented on CASSANDRA-6659:

I'm not sure the "refactoring of QP.prepare" is useful, nor that we need 2 prepare method
in the interface. The QueryState that the existing prepare methods takes has a getClientState(),
and if that's an instance of ThriftClientState, then it's from thrift (and you can call the
existing QP.prepare() with the proper flag). Also, that's a nit, but I'd be keen to rewrite
the thrift getPrepared() to getPreparedForThrift() or something so it's a bit more explicit
now that it's in a somewhat public interface.

The rest of the changes lgtm.

> Allow "intercepting" query by user provided custom classes
> ----------------------------------------------------------
>                 Key: CASSANDRA-6659
>                 URL:
>             Project: Cassandra
>          Issue Type: Improvement
>            Reporter: Sylvain Lebresne
>            Assignee: Sylvain Lebresne
>            Priority: Minor
>         Attachments: 6659.txt
> The idea for this ticket is to abstract the main execution methods of QueryProcessor
into an interface, something like:
> {noformat}
> public interface QueryHandler
> {
>     public ResultSet process(String query, QueryState state, QueryOptions options);
>     public ResultMessage.Prepared prepare(String query, QueryState state);
>     public ResultSet processPrepared(CQLStatement statement, QueryState state, QueryOptions
>     public ResultSet processBatch(BatchStatement statement, QueryState state, BatchQueryOptions
> }
> {noformat}
> and to allow users to provide a specific class of their own (implementing said interface)
to which the native protocol would handoff queries to (so by default queries would go to QueryProcessor,
but you would have a way to use a custom class instead).
> A typical use case for that could be to allow some form of custom logging of incoming
queries and/or of their results. But this could probably also have some application for testing
as one could have a handler that completely bypass QueryProcessor if you want, say, do perf
regression tests for a given driver (and don't want to actually execute the query as you're
perf testing the driver, not C*) without needing to patch the sources. Those being just examples,
the mechanism is generic enough to allow for other ideas.
> Most importantly, it requires very little code in C*. As for how users would register
their "handler", it can be as simple as a startup flag indicating the class to use, or a yaml
setting, or both.

This message was sent by Atlassian JIRA

View raw message