[ 
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)

Reply via email to