Hi, I agree that it isn't a big problem; your example shows that approx. equivalent behaviour could already occur now.
We do have a very concrete problem which is related: an installation of our product which uses Jackrabbit for persistence keeps logging lots of warnings (in the order of thousands per day): Aug 29, 2007 4:56:33 PM org.apache.jackrabbit.core.query.lucene.LazyQueryResultImpl$LazyScoreNod eIterator fetchNext WARNING: Exception retrieving Node with UUID: b11aa8a2-beed-4d24-95a0-592b6b193534: javax.jcr.ItemNotFoundException: b11aa8a2-beed-4d24-95a0-592b6b193534 Re-building the search index does not help: the logging of these warnings just continuous. I just can't believe that these result from a save that throws away many nodes while another thread loops over a query result. Any thoughts on this? Best regards, Martijn -- Martijn Hendriks <GX> creative online development B.V. t: 024 - 3888 261 f: 024 - 3888 621 e: [EMAIL PROTECTED] Wijchenseweg 111 6538 SW Nijmegen http://www.gx.nl/ > -----Original Message----- > From: Jukka Zitting [mailto:[EMAIL PROTECTED] > Sent: Thursday, August 30, 2007 9:40 AM > To: dev@jackrabbit.apache.org > Subject: Re: Database connections & queries > > Hi, > > On 8/30/07, Martijn Hendriks <[EMAIL PROTECTED]> wrote: > > If we don't take a clustered setup into account, then indeed the > > search index should always be in sync with the persistent > state. The > > ScoreNode objects in the LazyQueryResultImpls resultNodes > field are, > > however, in general not in sync with the persistent state > as they are > > always loaded during the construction of the LazyQueryResultImpl > > (because the > > Searchindex.getResultFetchSize() currently returns > Integer.MAX_VALUE). > > Thus, after construction of the LazyQueryResultImpl another thread > > could remove nodes that are in the resultNodes array of the > > LazyQueryResultImpl with the behaviour described above as a > consequence. > > I don't see that as a big problem. It's roughly equivalent to > the following case: > > Session sessionA = ...; > Session sessionB = ...; > > Node node = sessionA.getRootNode().getNode("path/to/node"); > > sessionB.getRootNode().getNode("path/to/node").remove(); > sessionB.save(); > > node.getProperty(...); > > BR, > > Jukka Zitting >