[
https://issues.apache.org/jira/browse/CASSANDRA-2301?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jonathan Ellis updated CASSANDRA-2301:
--------------------------------------
Attachment: 2301-v2.txt
I'm actually not sure how this could help -- dfile.close() already
un-references the buffer, so there's no need to set dfile itself to be null.
Also, the file pointer changes as we read through the file, so changing
bytescomplete to init-once is broken. (This is what nodetool compactionstats
uses.)
My guess is that the second time around you just got lucky and index build was
able to keep up w/ streaming enough to avoid OOMing.
But there is a bug here with the file/buffer handling -- we should lazy-init
this once we're ready to build the index, rather than when we enqueue the task.
Patch attached w/ this approach.
> OOM on repair with many inconsistent ranges
> -------------------------------------------
>
> Key: CASSANDRA-2301
> URL: https://issues.apache.org/jira/browse/CASSANDRA-2301
> Project: Cassandra
> Issue Type: Bug
> Affects Versions: 0.7.0
> Reporter: Joaquin Casares
> Assignee: Joaquin Casares
> Fix For: 0.7.4
>
> Attachments: 2301-v2.txt, 2301.diff
>
>
> Repair can OOM when lots of ranges are inconsistent, causing many sstables to
> be streamed.
> I replicated the error by making 1264 3MB sstables on one node, added a
> second node, changed the replication factor to 2, and ran a repair.
> Looking at the heap dump of the original failure, there were 2.4GB of
> FutureTasks, each taking up 8MB of space. I tracked down the
> BufferedRandomAccessFile and made sure that it was cleared every time it was
> closed inside of src/java/org/apache/cassandra/io/sstable/SSTableWriter.java.
> Attached is the patch I used which stopped the error when I was trying to
> replicate it.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira