Hi Jennifier, Could you apply this patch to the kernel and then see if the problem still exists? If you want I can send you a jar but then I need to know what version of Neo4j you are using.
Regards, Johan On Mon, May 23, 2011 at 6:50 PM, Jennifer Hickey <jhic...@vmware.com> wrote: > Hi Tobias, > > Looks like the environment is still setup, so I should be able to attempt a > repro with a patched version. Let me know what you would like me to use. > > Thanks, > Jennifer > ________________________________________ > From: user-boun...@lists.neo4j.org [user-boun...@lists.neo4j.org] On Behalf > Of Tobias Ivarsson [tobias.ivars...@neotechnology.com] > Sent: Monday, May 16, 2011 11:01 PM > To: Neo4j user discussions > Subject: Re: [Neo4j] ClosedChannelExceptions in highly concurrent environment > > Hi Jennifer, > > Could you reproduce it on your side by doing the same kind of systems tests > again? If you could then I'd be very happy if you could try a patched > version that we have been working on and see if that fixes the issue. > > Cheers, > Tobias > > On Tue, May 17, 2011 at 2:49 AM, Jennifer Hickey <jhic...@vmware.com> wrote: > >> Hi Tobias, >> Unfortunately I don't have an isolated test case, as I was doing a fairly >> involved system test at the time. I may be able to have a colleague work on >> reproducing it at a later date (I've been diverted to something else for the >> moment). >> >> I was remote debugging with Eclipse, so I toggled a method breakpoint on >> Thread.interrupt() and then inspected the stack once the breakpoint was hit. >> >> Sorry I don't have more information at the moment. I agree that >> eliminating the interrupts sounds like the best approach, if possible. >> >> Thanks, >> Jennifer >> ________________________________________ >> From: user-boun...@lists.neo4j.org [user-boun...@lists.neo4j.org] On >> Behalf Of Tobias Ivarsson [tobias.ivars...@neotechnology.com] >> Sent: Thursday, April 28, 2011 6:23 AM >> To: Neo4j user discussions >> Subject: Re: [Neo4j] ClosedChannelExceptions in highly concurrent >> environment >> >> Hi Jennifer, >> >> I'd first like to thank you for the testing and analysis you've done. Very >> useful stuff. Do you think you could send some test code our way that >> reproduces this issue? >> >> This is actually the first time this issue has been reported, so I wouldn't >> say it is a common issue. My guess is that your thread volume triggered a >> rare condition that wouldn't be encountered otherwise. >> >> I'm also curious to know how you found the source of the interruptions. >> When >> I debug thread interruptions I've never been able to find out where the >> thread got interrupted from without doing tedious procedures of breakpoint >> + >> logging + trying to match thread ids. If you have a better method for doing >> that I'd very much like to know. >> >> I think we should focus the effort on fixing the interruption issue if we >> can. And I believe we would be able to do that if the interruptions do in >> fact originate from where you say they do. But the suggestion of being able >> to switch the lucene directory implementation is still interesting, but as >> you point out since it has issues on some platforms it would be better if >> we >> could be rid of the interruption issue. >> >> Cheers, >> Tobias >> >> On Thu, Apr 28, 2011 at 12:41 AM, Jennifer Hickey <jhic...@vmware.com >> >wrote: >> >> > Hello, >> > I've been running some tests w/approx 400 threads reading various indexed >> > property values. I'm running on 64 bit Linux. I was frequently seeing >> the >> > ClosedChannelException below. The javadoc on Lucene's NIOFSDirectory >> states >> > that "Accessing this class either directly or indirectly from a thread >> while >> > it's interrupted can close the underlying file descriptor immediately if >> at >> > the same time the thread is blocked on IO. The file descriptor will >> remain >> > closed and subsequent access to {@link NIOFSDirectory} will throw a >> {@link >> > ClosedChannelException}. If your application uses either {@link >> > Thread#interrupt()} or {@link Future#cancel(boolean)} you should use >> {@link >> > SimpleFSDirectory} in favor of {@link NIOFSDirectory}." >> > >> > A bit of debugging revealed that the Thread.interrupts were coming from >> > Neo4j, specifically in RWLock and MappedPersistenceWindow. So it seems >> like >> > this would be a common problem, though perhaps I am missing something? >> > >> > SimpleFSDirectory seems a bit of a performance bottleneck, so I switched >> to >> > MMapDirectory and the problem did go away. I didn't see a way to switch >> > implementations w/out modifying neo4j code, so I changed LuceneDataSource >> as >> > follows: >> > >> > static Directory getDirectory( String storeDir, >> > IndexIdentifier identifier ) throws IOException >> > { >> > MMapDirectory dir=new MMapDirectory(getFileDirectory( storeDir, >> > identifier), null); >> > if(MMapDirectory.UNMAP_SUPPORTED) { >> > dir.setUseUnmap(true); >> > } >> > return dir; >> > } >> > >> > So I'm wondering if others have seen this problem and/or if there is a >> > recommended solution? Our product runs on quite a few different >> operating >> > systems, so I have some reservations about using MMapDirectory as well >> > (javadoc speaks of a few caveats on Windows, 64 vs 32, etc). Also, I'd >> > rather not maintain a patched version of the neo4j code if avoidable. >> > >> > Thanks! >> > Jennifer >> > >> > Exception: >> > Caused by: java.nio.channels.ClosedChannelException >> > at sun.nio.ch.FileChannelImpl.ensureOpen(FileChannelImpl.java:88) >> > at sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:613) >> > at >> > >> org.apache.lucene.store.NIOFSDirectory$NIOFSIndexInput.readInternal(NIOFSDirectory.java:161) >> > at >> > >> org.apache.lucene.store.BufferedIndexInput.readBytes(BufferedIndexInput.java:139) >> > at >> > >> org.apache.lucene.index.CompoundFileReader$CSIndexInput.readInternal(CompoundFileReader.java:285) >> > at >> > >> org.apache.lucene.store.BufferedIndexInput.refill(BufferedIndexInput.java:160) >> > at >> > >> org.apache.lucene.store.BufferedIndexInput.readByte(BufferedIndexInput.java:39) >> > at org.apache.lucene.store.DataInput.readVInt(DataInput.java:86) >> > at >> > >> org.apache.lucene.index.codecs.DeltaBytesReader.read(DeltaBytesReader.java:40) >> > at >> > >> org.apache.lucene.index.codecs.PrefixCodedTermsReader$FieldReader$SegmentTermsEnum.next(PrefixCodedTermsReader.java:469) >> > at >> > >> org.apache.lucene.index.codecs.PrefixCodedTermsReader$FieldReader$SegmentTermsEnum.seek(PrefixCodedTermsReader.java:385) >> > at org.apache.lucene.index.TermsEnum.seek(TermsEnum.java:68) >> > at org.apache.lucene.index.Terms.docFreq(Terms.java:53) >> > at org.apache.lucene.index.SegmentReader.docFreq(SegmentReader.java:898) >> > at org.apache.lucene.index.IndexReader.docFreq(IndexReader.java:882) >> > at >> > org.apache.lucene.index.DirectoryReader.docFreq(DirectoryReader.java:687)
_______________________________________________ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user