[
https://issues.apache.org/jira/browse/CASSANDRA-9975?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14730571#comment-14730571
]
Benedict commented on CASSANDRA-9975:
-------------------------------------
I've pushed an update that fixes a problem with {{IllegalStateException}} being
thrown erroneously. I had previously provided {{UnfilteredRowFunction}} as the
default function type as I thought this would be easier, and provided
{{RowFunction}} as a convenience for clients that operated only an
{{RowIterator}} - however I forgot this myself, and used it for an
{{UnfilteredRowIterator}}, which it was rejecting as invalid.
Instead I've split {{UnfilteredRowFunction}} into {{RowFunction}} and
{{MarkerFunction}}, and rejected the latter in the constructor to a
{{TransfprmingRowIterator}}.
I've also reintroduced {{BTreeRow.isLive}} - not sure how that got removed -
and swapped the constructor argument order for {{TransformingIterator}} to
avoid class cast conflicts.
> Flatten RowIterator call hierarchy with a shared RowTransformer
> ---------------------------------------------------------------
>
> 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.0 rc1
>
>
> 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)