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
> 

Reply via email to