The XML parser is probably not threadsafe but is being reused concurrently by 
multiple post threads resulting in these exceptions. The observed 'randomness' 
of the errors would be due to the unpredictable nature of the race condition 
between threads. The reason you don't see this with smaller documents would be 
that the likelihood of contention on small documents is reduced because the 
race is eliminated. This would also be generally independent of JVM, OS, memory 
allocation, etc as it seems to be.

I would look into how these classes/methods are dealing with the parser 
factory. (keeping a static copy maybe?)

org.apache.solr.handler.XmlUpdateRequestHandler.processUpdate(XmlUpdateRequestHandler.java:148)
org.apache.solr.handler.XmlUpdateRequestHandler.doLegacyUpdate(XmlUpdateRequestHandler.java:386)
org.apache.solr.servlet.SolrUpdateServlet.doPost(SolrUpdateServlet.java:65)

This seems to me to be the most likely culprit given what I've seen so far on 
this thread. I hope it helps.

-- Brian

----- Original Message ----
From: Yonik Seeley <[EMAIL PROTECTED]>
To: solr-user@lucene.apache.org
Sent: Thursday, April 17, 2008 3:28:08 PM
Subject: Re: ODD Solr Error on Update POST - XMLStreamException: ParseError

On Thu, Apr 17, 2008 at 5:41 PM, realw5 <[EMAIL PROTECTED]> wrote:
>  Ok, so I tried tomcat 5.5, still not go. It might be helpful to note, that
>  when I decrease the size of the post (take fields out) I can get it to post
>  without error. It seems like it's barfing on a certain file size (buffer
>  issue maybe??). I'm running 32-bit Ubuntu on our production system and have
>  never seen these errors. Is it possible libc has a bug only in 64-bit
>  Ubuntu?
>
>  Lastly, I can try another OS...do you have any recommendations for a good
>  64-bit linux flavor?

Whatever you are comfortable with... if you don't already have
something lying around, perhaps the latest ubuntu beta (8.04)

Also double-check that you are sending exactly what you think you are.
If you haven't already, capture the XML you are sending to a file,
then use curl (the same version on the same box) to send the file to
both the server that works and the one that doesn't.

-Yonik



Reply via email to