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

Paulo Motta edited comment on CASSANDRA-11831 at 5/20/16 5:33 PM:
------------------------------------------------------------------

LGTM, just two minor nits:
* On the unit tests, it seems you're setting 
{{cassandra.never_purge_tombstones}} globally via system properties, won't this 
propagate to other tests? Perhaps it's better to set the property directly 
during these tests on {{CompactionController}} ? Maybe that's why some testing 
are failing on 
[trunk|http://cassci.datastax.com/view/Dev/view/krummas/job/krummas-marcuse-11831-trunk-testall/lastCompletedBuild/testReport/]
 ?
* To avoid doing useless tombstone compactions that won't drop tombstones, 
should we maybe also disable tombstone compactions on 
{{AbstractCompactionStrategy}} if {{cassandra.never_purge_tombstones=true}} ?

edit: this is just a review of {{cassandra.never_purge_tombstones}} flag, we 
should probably move discussion of a more long term solution to the problem of 
improving compaction throughput with many sstables to another ticket.


was (Author: pauloricardomg):
LGTM, just two minor nits:
* On the unit tests, it seems you're setting 
{{cassandra.never_purge_tombstones}} globally via system properties, won't this 
propagate to other tests? Perhaps it's better to set the property directly 
during these tests on {{CompactionController}} ? Maybe that's why some testing 
are failing on 
[trunk|http://cassci.datastax.com/view/Dev/view/krummas/job/krummas-marcuse-11831-trunk-testall/lastCompletedBuild/testReport/]
 ?
* To avoid doing useless tombstone compactions that won't drop tombstones, 
should we maybe also disable tombstone compactions on 
{{AbstractCompactionStrategy}} if {{cassandra.never_purge_tombstones=true}} ?

> Ability to disable purgeable tombstone check via startup flag
> -------------------------------------------------------------
>
>                 Key: CASSANDRA-11831
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-11831
>             Project: Cassandra
>          Issue Type: New Feature
>            Reporter: Ryan Svihla
>            Assignee: Marcus Eriksson
>             Fix For: 2.1.x, 2.2.x, 3.0.x, 3.x
>
>
> On Cassandra 2.1.14 hen a node gets way behind and has 10s of thousand 
> sstables it appears a lot of the CPU time is spent doing checks like this on 
> a call to getMaxPurgeableTimestamp 
>      org.apache.cassandra.utils.Murmur3BloomFilter.hash(java.nio.ByteBuffer, 
> int, int, long, long[]) @bci=13, line=57 (Compiled frame; information may be 
> imprecise)
>     - org.apache.cassandra.utils.BloomFilter.indexes(java.nio.ByteBuffer) 
> @bci=22, line=82 (Compiled frame)
>     - org.apache.cassandra.utils.BloomFilter.isPresent(java.nio.ByteBuffer) 
> @bci=2, line=107 (Compiled frame)
>     - 
> org.apache.cassandra.db.compaction.CompactionController.maxPurgeableTimestamp(org.apache.cassandra.db.DecoratedKey)
>  @bci=89, line=186 (Compiled frame)
>     - 
> org.apache.cassandra.db.compaction.LazilyCompactedRow.getMaxPurgeableTimestamp()
>  @bci=21, line=99 (Compiled frame)
>     - 
> org.apache.cassandra.db.compaction.LazilyCompactedRow.access$300(org.apache.cassandra.db.compaction.LazilyCompactedRow)
>  @bci=1, line=49 (Compiled frame)
>     - 
> org.apache.cassandra.db.compaction.LazilyCompactedRow$Reducer.getReduced() 
> @bci=241, line=296 (Compiled frame)
>     - 
> org.apache.cassandra.db.compaction.LazilyCompactedRow$Reducer.getReduced() 
> @bci=1, line=206 (Compiled frame)
>     - org.apache.cassandra.utils.MergeIterator$OneToOne.computeNext() 
> @bci=44, line=206 (Compiled frame)
>     - com.google.common.collect.AbstractIterator.tryToComputeNext() @bci=9, 
> line=143 (Compiled frame)
>     - com.google.common.collect.AbstractIterator.hasNext() @bci=61, line=138 
> (Compiled frame)
>     - com.google.common.collect.Iterators$7.computeNext() @bci=4, line=645 
> (Compiled frame)
>     - com.google.common.collect.AbstractIterator.tryToComputeNext() @bci=9, 
> line=143 (Compiled frame)
>     - com.google.common.collect.AbstractIterator.hasNext() @bci=61, line=138 
> (Compiled frame)
>     - 
> org.apache.cassandra.db.ColumnIndex$Builder.buildForCompaction(java.util.Iterator)
>  @bci=1, line=166 (Compiled frame)
>     - org.apache.cassandra.db.compaction.LazilyCompactedRow.write(long, 
> org.apache.cassandra.io.util.DataOutputPlus) @bci=52, line=121 (Compiled 
> frame)
>     - 
> org.apache.cassandra.io.sstable.SSTableWriter.append(org.apache.cassandra.db.compaction.AbstractCompactedRow)
>  @bci=18, line=193 (Compiled frame)
>     - 
> org.apache.cassandra.io.sstable.SSTableRewriter.append(org.apache.cassandra.db.compaction.AbstractCompactedRow)
>  @bci=13, line=127 (Compiled frame)
>     - org.apache.cassandra.db.compaction.CompactionTask.runMayThrow() 
> @bci=666, line=197 (Compiled frame)
>     - org.apache.cassandra.utils.WrappedRunnable.run() @bci=1, line=28 
> (Compiled frame)
>     - 
> org.apache.cassandra.db.compaction.CompactionTask.executeInternal(org.apache.cassandra.db.compaction.CompactionManager$CompactionExecutorStatsCollector)
>  @bci=6, line=73 (Compiled frame)
>     - 
> org.apache.cassandra.db.compaction.AbstractCompactionTask.execute(org.apache.cassandra.db.compaction.CompactionManager$CompactionExecutorStatsCollector)
>  @bci=2, line=59 (Compiled frame)
>     - 
> org.apache.cassandra.db.compaction.CompactionManager$BackgroundCompactionCandidate.run()
>  @bci=125, line=264 (Compiled frame)
>     - java.util.concurrent.Executors$RunnableAdapter.call() @bci=4, line=511 
> (Compiled frame)
>     - java.util.concurrent.FutureTask.run() @bci=42, line=266 (Compiled frame)
>     - 
> java.util.concurrent.ThreadPoolExecutor.runWorker(java.util.concurrent.ThreadPoolExecutor$Worker)
>  @bci=95, line=1142 (Compiled frame)
>     - java.util.concurrent.ThreadPoolExecutor$Worker.run() @bci=5, line=617 
> (Compiled frame)
>     - java.lang.Thread.run() @bci=11, line=745 (Compiled frame)
> If we could at least on startup pass a flag like -DskipTombstonePurgeCheck so 
> we could in these particularly bad cases just avoid the calculation and merge 
> tables until we have less to worry about then restart the node with that flag 
> missing once we're down to a more manageable amount of sstables. 



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

Reply via email to