Testing subnodes
edcorners May 31, 2012 5:47 PMMy Jackrabbit repository has problems when handling more than 10.000 child nodes under a parent node. I wanted to test that on Modeshape so I made a repository based on the "Cars" example, but using a JPA datasource. Also, added to the CND a "photo" property.
[car:Car] > nt:unstructured - car:maker (string) ... - car:engine (string) - car:photo (binary) // cars' pic
I tried to create about 2000 nodes under a particular parent with this definition and its reaching 1100 nodes before it starts throwing:
15:01:20,031 ERROR [STDERR] Exception in thread "Lucene Merge Thread #0" Exception in thread "RMI TCP Connection(idle)" org.apache.lucene.index.MergePolicy$MergeException: java.lang.OutOfMemoryError: Java heap space 15:01:20,031 ERROR [STDERR] at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:517) 15:01:20,046 ERROR [STDERR] at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:482) 15:01:20,046 ERROR [STDERR] Caused by: java.lang.OutOfMemoryError: Java heap space 15:01:20,046 ERROR [STDERR] at org.apache.lucene.store.RAMFile.newBuffer(RAMFile.java:89) 15:01:20,046 ERROR [STDERR] at org.apache.lucene.store.RAMFile.addBuffer(RAMFile.java:62) 15:01:20,046 ERROR [STDERR] at org.apache.lucene.store.RAMOutputStream.switchCurrentBuffer(RAMOutputStream.java:132) 15:01:20,046 ERROR [STDERR] at org.apache.lucene.store.RAMOutputStream.writeByte(RAMOutputStream.java:107) 15:01:20,046 ERROR [STDERR] at org.apache.lucene.store.DataOutput.writeVInt(DataOutput.java:74) 15:01:20,046 ERROR [STDERR] at org.apache.lucene.index.FormatPostingsDocsWriter.addDoc(FormatPostingsDocsWriter.java:101) 15:01:20,046 ERROR [STDERR] at org.apache.lucene.index.SegmentMerger.appendPostings(SegmentMerger.java:590) 15:01:20,046 ERROR [STDERR] at org.apache.lucene.index.SegmentMerger.mergeTermInfos(SegmentMerger.java:538) 15:01:20,046 ERROR [STDERR] at org.apache.lucene.index.SegmentMerger.mergeTerms(SegmentMerger.java:470) 15:01:20,046 ERROR [STDERR] at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:109) 15:01:20,046 ERROR [STDERR] at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4273) 15:01:20,046 ERROR [STDERR] at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:3917) 15:01:20,046 ERROR [STDERR] at org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:388) 15:01:20,046 ERROR [STDERR] at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:456) 15:01:20,046 ERROR [STDERR] java.lang.OutOfMemoryError: Java heap space 15:01:20,046 ERROR [STDERR] at java.io.BufferedInputStream.<init>(Unknown Source) 15:01:20,046 ERROR [STDERR] at java.io.BufferedInputStream.<init>(Unknown Source) 15:01:20,046 ERROR [STDERR] at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source) 15:01:20,046 ERROR [STDERR] at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source) 15:01:20,046 ERROR [STDERR] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) 15:01:20,046 ERROR [STDERR] at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 15:01:20,046 ERROR [STDERR] at java.lang.Thread.run(Unknown Source)
Since my app is very likely to present this case, I would be helpful to know if there's a better way to handle this situation in modeshape without causing a "Java heap space" too soon.
Any suggestions? Thanks.