[
https://issues.apache.org/jira/browse/CASSANDRA-9285?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15004959#comment-15004959
]
Yuki Morishita commented on CASSANDRA-9285:
-------------------------------------------
[~pierz] Unfortunately, your approach didn't work since {{close}} is also used
in server side {{closeAndOpenReader}} path, and the change makes it unable to
open written SSTable since those CompressedMetadata's offsets and IndexSummary
are shared to reader.
Here's my alternative approach: https://github.com/yukim/cassandra/commits/9285
Instead, we open SSTableReader from SSTableWriter and immediately close it.
I tried to create other path to only close SSTableWriter completely, but right
now saving IndexSummary can be done through SSTableReader and SSTableWriter
does not have access to CompressionMetadata.
Since my approach opens SSTableReader once, it depends on accessing
{{DatabaseDescriptor.getFileCacheSizeInMB}} which we need to initialize in
offline environment.
So I needed to move initialize logic directly to {{Config}}.
> LEAK DETECTED in sstwriter
> --------------------------
>
> Key: CASSANDRA-9285
> URL: https://issues.apache.org/jira/browse/CASSANDRA-9285
> Project: Cassandra
> Issue Type: Bug
> Components: Local Write-Read Paths
> Reporter: Pierre N.
> Fix For: 2.1.x
>
>
> reproduce bug :
> {code}
> public static void main(String[] args) throws Exception {
> System.setProperty("cassandra.debugrefcount","true");
>
> String ks = "ks1";
> String table = "t1";
>
> String schema = "CREATE TABLE " + ks + "." + table + "(a1 INT,
> PRIMARY KEY (a1));";
> String insert = "INSERT INTO "+ ks + "." + table + "(a1) VALUES(?);";
>
> File dir = new File("/var/tmp/" + ks + "/" + table);
> dir.mkdirs();
>
> CQLSSTableWriter writer =
> CQLSSTableWriter.builder().forTable(schema).using(insert).inDirectory(dir).build();
>
> writer.addRow(1);
> writer.close();
> writer = null;
>
> Thread.sleep(1000);System.gc();
> Thread.sleep(1000);System.gc();
> }
> {code}
> {quote}
> [2015-05-01 16:09:59,139] [Reference-Reaper:1] ERROR
> org.apache.cassandra.utils.concurrent.Ref - LEAK DETECTED: a reference
> (org.apache.cassandra.utils.concurrent.Ref$State@79fa9da9) to class
> org.apache.cassandra.io.util.SafeMemory$MemoryTidy@2053866990:Memory@[7f87f8043b20..7f87f8043b48)
> was not released before the reference was garbage collected
> [2015-05-01 16:09:59,143] [Reference-Reaper:1] ERROR
> org.apache.cassandra.utils.concurrent.Ref - Allocate trace
> org.apache.cassandra.utils.concurrent.Ref$State@79fa9da9:
> Thread[Thread-2,5,main]
> at java.lang.Thread.getStackTrace(Thread.java:1552)
> at org.apache.cassandra.utils.concurrent.Ref$Debug.<init>(Ref.java:200)
> at org.apache.cassandra.utils.concurrent.Ref$State.<init>(Ref.java:133)
> at org.apache.cassandra.utils.concurrent.Ref.<init>(Ref.java:60)
> at org.apache.cassandra.io.util.SafeMemory.<init>(SafeMemory.java:32)
> at
> org.apache.cassandra.io.util.SafeMemoryWriter.<init>(SafeMemoryWriter.java:33)
> at
> org.apache.cassandra.io.sstable.IndexSummaryBuilder.<init>(IndexSummaryBuilder.java:111)
> at
> org.apache.cassandra.io.sstable.SSTableWriter$IndexWriter.<init>(SSTableWriter.java:576)
> at
> org.apache.cassandra.io.sstable.SSTableWriter.<init>(SSTableWriter.java:140)
> at
> org.apache.cassandra.io.sstable.AbstractSSTableSimpleWriter.getWriter(AbstractSSTableSimpleWriter.java:58)
> at
> org.apache.cassandra.io.sstable.SSTableSimpleUnsortedWriter$DiskWriter.run(SSTableSimpleUnsortedWriter.java:227)
> [2015-05-01 16:09:59,144] [Reference-Reaper:1] ERROR
> org.apache.cassandra.utils.concurrent.Ref - LEAK DETECTED: a reference
> (org.apache.cassandra.utils.concurrent.Ref$State@664382e3) to class
> org.apache.cassandra.io.util.SafeMemory$MemoryTidy@899100784:Memory@[7f87f8043990..7f87f8043994)
> was not released before the reference was garbage collected
> [2015-05-01 16:09:59,144] [Reference-Reaper:1] ERROR
> org.apache.cassandra.utils.concurrent.Ref - Allocate trace
> org.apache.cassandra.utils.concurrent.Ref$State@664382e3:
> Thread[Thread-2,5,main]
> at java.lang.Thread.getStackTrace(Thread.java:1552)
> at org.apache.cassandra.utils.concurrent.Ref$Debug.<init>(Ref.java:200)
> at org.apache.cassandra.utils.concurrent.Ref$State.<init>(Ref.java:133)
> at org.apache.cassandra.utils.concurrent.Ref.<init>(Ref.java:60)
> at org.apache.cassandra.io.util.SafeMemory.<init>(SafeMemory.java:32)
> at
> org.apache.cassandra.io.util.SafeMemoryWriter.<init>(SafeMemoryWriter.java:33)
> at
> org.apache.cassandra.io.sstable.IndexSummaryBuilder.<init>(IndexSummaryBuilder.java:110)
> at
> org.apache.cassandra.io.sstable.SSTableWriter$IndexWriter.<init>(SSTableWriter.java:576)
> at
> org.apache.cassandra.io.sstable.SSTableWriter.<init>(SSTableWriter.java:140)
> at
> org.apache.cassandra.io.sstable.AbstractSSTableSimpleWriter.getWriter(AbstractSSTableSimpleWriter.java:58)
> at
> org.apache.cassandra.io.sstable.SSTableSimpleUnsortedWriter$DiskWriter.run(SSTableSimpleUnsortedWriter.java:227)
> [2015-05-01 16:09:59,144] [Reference-Reaper:1] ERROR
> org.apache.cassandra.utils.concurrent.Ref - LEAK DETECTED: a reference
> (org.apache.cassandra.utils.concurrent.Ref$State@3cca0ac2) to class
> org.apache.cassandra.io.util.SafeMemory$MemoryTidy@499043670:Memory@[7f87f8039940..7f87f8039c60)
> was not released before the reference was garbage collected
> [2015-05-01 16:09:59,144] [Reference-Reaper:1] ERROR
> org.apache.cassandra.utils.concurrent.Ref - Allocate trace
> org.apache.cassandra.utils.concurrent.Ref$State@3cca0ac2:
> Thread[Thread-2,5,main]
> at java.lang.Thread.getStackTrace(Thread.java:1552)
> at org.apache.cassandra.utils.concurrent.Ref$Debug.<init>(Ref.java:200)
> at org.apache.cassandra.utils.concurrent.Ref$State.<init>(Ref.java:133)
> at org.apache.cassandra.utils.concurrent.Ref.<init>(Ref.java:60)
> at org.apache.cassandra.io.util.SafeMemory.<init>(SafeMemory.java:32)
> at
> org.apache.cassandra.io.compress.CompressionMetadata$Writer.<init>(CompressionMetadata.java:274)
> at
> org.apache.cassandra.io.compress.CompressionMetadata$Writer.open(CompressionMetadata.java:285)
> at
> org.apache.cassandra.io.compress.CompressedSequentialWriter.<init>(CompressedSequentialWriter.java:74)
> at
> org.apache.cassandra.io.util.SequentialWriter.open(SequentialWriter.java:124)
> at
> org.apache.cassandra.io.sstable.SSTableWriter.<init>(SSTableWriter.java:129)
> at
> org.apache.cassandra.io.sstable.AbstractSSTableSimpleWriter.getWriter(AbstractSSTableSimpleWriter.java:58)
> at
> org.apache.cassandra.io.sstable.SSTableSimpleUnsortedWriter$DiskWriter.run(SSTableSimpleUnsortedWriter.java:227)
> {quote}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)