[ https://issues.apache.org/jira/browse/CASSANDRA-7360?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sylvain Lebresne updated CASSANDRA-7360: ---------------------------------------- Attachment: 7360-v2.txt bq. I would have wrapped it into a UncheckedException (e.g. SyncException) that I would have caught in rawAddRow and rethrow as IOException as it is more direct You're right, that's probably cleaner overall, made that change in the v2 attached. bq. I think that in BufferedWriter.close() the code should probably try to call super.close before trying to rethrow the exception It's fixed by the virtue of BufferedWriter not overriding close() anymore. bq. I have the following error message in my log when I run the Unit tests That is something we need to fix but that's completely unrelated to this ticket so not gonna fix it here. But created CASSANDRA-7889 so we don't forget to scratch this itch. > CQLSSTableWriter consumes all memory for table with compound primary key > ------------------------------------------------------------------------ > > Key: CASSANDRA-7360 > URL: https://issues.apache.org/jira/browse/CASSANDRA-7360 > Project: Cassandra > Issue Type: Bug > Components: Core > Reporter: Xu Zhongxing > Assignee: Sylvain Lebresne > Fix For: 2.0.11 > > Attachments: 7360-v2.txt, 7360.txt > > > When using CQLSSTableWriter to write a table with compound primary key, if > the partition key is identical for a huge amount of records, the sync() > method is never called, and the memory usage keeps growing until the memory > is exhausted. > Could the code be improved to do sync() even when there is no new row > created? The relevant code is in SSTableSimpleUnsortedWriter.java and > AbstractSSTableSimpleWriter.java. I am new to the code and cannot produce a > reasonable patch for now. > The problem can be reproduced by the following test case: > {code} > import org.apache.cassandra.io.sstable.CQLSSTableWriter; > import org.apache.cassandra.exceptions.InvalidRequestException; > import java.io.IOException; > import java.util.UUID; > class SS { > public static void main(String[] args) { > String schema = "create table test.t (x uuid, y uuid, primary key (x, > y))"; > String insert = "insert into test.t (x, y) values (?, ?)"; > CQLSSTableWriter writer = CQLSSTableWriter.builder() > .inDirectory("/tmp/test/t") > .forTable(schema).withBufferSizeInMB(32) > .using(insert).build(); > UUID id = UUID.randomUUID(); > try { > for (int i = 0; i < 50000000; i++) { > UUID id2 = UUID.randomUUID(); > writer.addRow(id, id2); > } > writer.close(); > } catch (Exception e) { > System.err.println("hell"); > } > } > } > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)