[ https://issues.apache.org/jira/browse/CASSANDRA-1610?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13046177#comment-13046177 ]
Jonathan Ellis commented on CASSANDRA-1610: ------------------------------------------- - I think Ben's selection of methods for the CompactionStrategy is an improvement, but I do like having an abstract class so it's obvious what the contract is for us vs having to inject parameters post-construction. - I'd like to move away from minor/major terms as too tied to the old compaction internals. Perhaps background/maximal instead? - We should also make user defined compactions part of ACS -- for some strategies (e.g. leveldb) we want to be able to reject user requests that would break strategy invariants. Note that this should probably return a single Task, rather than a list. ("Maximal" will also usually return a single task, but it's cleaner to represent "nothing to do" as an empty list, than as null.) - handleInsufficientSpaceForCompaction is a bad encapsulation; it means both it and its caller have to deal with "find a place for an sstable." suggest leaving it up to CT.execute to deal with. Here's what I think ACS should end up looking like with these changes: {code} /** * Puggable compaction strategy determines how SSTables get merged. * * There are two main goals: * - perform background compaction constantly as needed; this typically makes a tradeoff between * i/o done by compaction, and merging done at read time. * - perform a full (maximum possible) compaction if requested by the user */ public abstract class AbstractCompactionStrategy { protected final ColumnFamilyStore cfs; protected final Map<String, String> options; protected AbstractCompactionStrategy(ColumnFamilyStore cfs, Map<String, String> options) { this.cfs = cfs; this.options = options; } /** * @return a list of compaction tasks that should run in the background to get the sstable * count down to desired parameters. * @param gcBefore throw away tombstones older than this */ public abstract List<AbstractCompactionTask> getBackgroundTasks(final int gcBefore); /** * @return the number of background tasks estimated to still be needed for this columnfamilystore */ public abstract int getEstimatedRemainingTasks(); /** * @return a list of compaction tasks that should be run to compact this columnfamilystore * as much as possible. * @param gcBefore throw away tombstones older than this */ public abstract List<AbstractCompactionTask> getMaximalTasks(final int gcBefore); /** * @return a compaction task corresponding to the requested sstables * @param gcBefore throw away tombstones older than this */ public abstract AbstractCompactionTask getUserDefinedTasks(List<SSTableReader> sstables, final int gcBefore); } {code} - Finally, can you update to conform with http://wiki.apache.org/cassandra/CodeStyle, especially the part about multiline statements? > Pluggable Compaction > -------------------- > > Key: CASSANDRA-1610 > URL: https://issues.apache.org/jira/browse/CASSANDRA-1610 > Project: Cassandra > Issue Type: Improvement > Components: Core > Reporter: Chris Goffinet > Assignee: Alan Liang > Priority: Minor > Labels: compaction > Fix For: 1.0 > > Attachments: 0001-move-compaction-code-into-own-package.patch, > 0001-move-compaction-code-into-own-package.patch, > 0001-move-compaction-code-into-own-package.patch, > 0001-move-compaction-code-into-own-package.patch, > 0001-move-compaction-code-into-own-package.patch, > 0001-move-compaction-code-into-own-package.patch, > 0001-pluggable-compaction.patch, > 0002-Pluggable-Compaction-and-Expiration.patch, > 0002-pluggable-compaction.patch, 0002-pluggable-compaction.patch, > 0002-pluggable-compaction.patch, 0002-pluggable-compaction.patch, > 0002-pluggable-compaction.patch, 0002-pluggable-compaction.patch, > 0002-pluggable-compaction.patch > > > In CASSANDRA-1608, I proposed some changes on how compaction works. I think > it also makes sense to allow the ability to have pluggable compaction per CF. > There could be many types of workloads where this makes sense. One example we > had at Digg was to completely throw away certain SSTables after N days. > This ticket addresses making compaction pluggable only. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira