[
https://issues.apache.org/jira/browse/CASSANDRA-1106?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Stu Hood resolved CASSANDRA-1106.
---------------------------------
Resolution: Invalid
Resolving as invalid: see the parent issue.
> Use Scanner API for all reads
> -----------------------------
>
> Key: CASSANDRA-1106
> URL: https://issues.apache.org/jira/browse/CASSANDRA-1106
> Project: Cassandra
> Issue Type: Sub-task
> Reporter: Stu Hood
> Priority: Minor
> Fix For: 0.8
>
> Attachments: 0001-Implement-transitional-CF-Slice-API.patch,
> 0002-Per-parent-Slice-based-atomicity-for-Memtables.patch,
> 0003-Use-Scanner-API-in-RowIteratorFactory-and-port-getTo.patch,
> 0004-Remove-IColumnIterator-and-other-stale-I-Filter-code.patch,
> 0005-Add-limit-parameter-to-QueryFilter-rather-than-level.patch,
> 0006-Add-MatchResult-to-give-FilteredScanner-hints-to-fin.patch,
> 0007-Compose-level-MatchResults-in-QueryFilter-and-begin-.patch,
> 0008-Add-IFilter.initial-to-return-the-first-interesting-.patch
>
>
> The goal of this issue is to eliminate the IColumnIterator interface, and to
> use the Slice/Scanner API for all reads. Additionally, this issue begins to
> optimize the interaction between FilteredScanner and QueryFilter to gain back
> speed lost in CASSANDRA-1095.
> This issue adds Memtable.Scanner and converts Memtables to maps from
> DecoratedKey -> List<Slice> (where the list represents a row: one entry for
> Standard CFs, and more than one entry for Super CFs). Since Slices are
> immutable, rows in the Memtable are merged using SliceMergingIterator, and
> atomically swapped out. This is much less granular atomicity than we support
> currently, so this approach to mapping the Memtable to Slices is wide open to
> debate.
> The row cache in this patch mimics the Memtable and becomes a map from
> DecoratedKey -> List<Slice>. In order to reuse the QueryFilter API, a
> db.ListScanner is added to wrap an individual row in the cache for filtering.
> One limitation imposed by this design is that the row cache can't be used as
> a write-through cache, since its entries are immutable.
> The common order of operations is:
> 1. Get a SeekableScanner implementation for the Memtable/cache entry/SSTable
> 2. Build a QueryFilter describing the query
> 3. Call QueryFilter.filter(scanner) to wrap the SeekableScanner in a
> FilteredScanner
> .* Optionally, merge multiple Scanners using MergingScanner
> 4. Call QueryFilter.collect(scanner) to wrap garbage collection around the
> merged input
> 5. Limit the output columns using QueryFilter.limit(scanner)
> Optimization between FilteredScanner and QueryFilter is accomplished via the
> MatchResult object, which is pretty ugly, and still a work in progress.
> Internally to a QueryFilter, IFilters for each level return MatchResults
> indicating where their next interesting matches are, and QueryFilter composes
> the levels into a MatchResult that a FilteredScanner uses to seek on its
> underlying Scanner.
> These patches remove a lot of deeply nested and complicated logic for dealing
> with super columns and garbage collection, including
> IFilter.filterSuperColumn (replaced naturally by Slice filtering),
> IFilter.collectReducedColumns (ditto) and ColumnFamilyStore.removeDeleted
> (replaced by ASlice.GCFunction). Additionally, they replace scads of
> AbstractIterator implementations that were implementing IColumnIterator on a
> case by case basis.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.