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

Benedict commented on CASSANDRA-9975:
-------------------------------------

On writing the follow up, CASSANDRA-9976, it became apparent it was easier and 
cleaner to do both at once, since they ultimately share quite a bit of 
functionality and approach. This is now available 
[here|https://github.com/belliottsmith/cassandra/tree/9975]. 

This version also goes a step further to completely eliminate the wrapping 
partition iterators, and all but a handful of wrapping row iterators (the 
remainder of which can be eliminated following CASSANDRA-9986). This is 
achieved by supporting concatenation / short read protection via a 
transformation function that "refils" the contents of an iterator with one or 
more new iterators. i.e.m once the input we're transforming is exhausted, we 
ask for a new one, which is swapped in, and the function stacks updated as 
necessary. This all but eliminates the jumping around of control flow for the 
outer execution of a query, although the inner execution (memtable, sstable) 
still has some cleaning up to be done to make it easy to debug.

> Flatten Iterator call hierarchy with a shared Transformer
> ---------------------------------------------------------
>
>                 Key: CASSANDRA-9975
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-9975
>             Project: Cassandra
>          Issue Type: Sub-task
>          Components: Core
>            Reporter: Benedict
>            Assignee: Benedict
>             Fix For: 3.0.x
>
>
> Stepping through a read response is made exceedingly difficult by the sheer 
> depth of the call hierarchy, and how rapidly your context jumps around. This 
> ticket intend to partially address that, by flattening one of the main causes 
> of this: iterator transformations.
> I have a patch that attempts to mitigate (but not entirely eliminate) this, 
> through the introduction of a {{RowTransformer}} class that all 
> transformations are applied through. If a transformation has already been 
> applied, the {{RowTransformer}} class does not wrap a new iterator, but 
> instead returns a new {{RowTransformer}} that wraps the original underlying 
> (untransformed) iterator and both transformations. This can accumulate an 
> arbitrary number of transformations and, quite importantly, can apply the 
> filtration step {{Unfiltered -> Row}}  in the same instance as well. The 
> intention being that a majority of control flow happens inside this 
> {{RowTransformer}}, so there is far less context jumping to cope with.



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

Reply via email to