It doesn't get thrown because that logic needs to continue - you don't 
necessarily want one bad document to stop all the following documents from 
being added. So the exception is sent to that method with the idea that you can 
override and do what you would like. I've written sample code around stopping 
and throwing an exception, but I guess its not totally trivial. Other ideas for 
reporting errors have been thrown around in the past, but no work on it has 
gotten any traction.


- Mark Miller
lucidimagination.com

On Mar 26, 2012, at 7:33 PM, Shawn Heisey wrote:

> I've been building a new version of my app that keeps our Solr indexes up to 
> date.  I had hoped to use StreamingUpdateSolrServer instead of 
> CommonsHttpSolrServer for performance reasons, but I have run into a 
> showstopper problem that has made me revert to CHSS.
> 
> I have been relying on exception handling to detect when there is any kind of 
> problem with any request sent to Solr.  Looking at the code for SUSS, it 
> seems that any exceptions thrown by lower level code are simply logged, then 
> forgotten as if they had never happened.
> 
> So far I have not been able to decipher how things actually work, so I can't 
> tell if it would be possible to propagate the exception back up into my code.
> 
> Questions for the experts: Would such propagation be possible without 
> compromising performance?  Is this a bug?  Can I somehow detect the failure 
> and throw an exception of my own?
> 
> For reference, here is the exception that gets logged, but not actually 
> thrown:
> 
> java.net.ConnectException: Connection refused
>        at java.net.PlainSocketImpl.socketConnect(Native Method)
>        at 
> java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
>        at 
> java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
>        at 
> java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
>        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
>        at java.net.Socket.connect(Socket.java:579)
>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>        at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>        at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>        at java.lang.reflect.Method.invoke(Method.java:601)
>        at 
> org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:140)
>        at 
> org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:125)
>        at 
> org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707)
>        at 
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1361)
>        at 
> org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
>        at 
> org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
>        at 
> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
>        at 
> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
>        at 
> org.apache.solr.client.solrj.impl.StreamingUpdateSolrServer$Runner.run(StreamingUpdateSolrServer.java:154)
>        at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
>        at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
>        at java.lang.Thread.run(Thread.java:722)
> 
> Thanks,
> Shawn
> 












Reply via email to