diff --git a/CHANGES.txt b/CHANGES.txt index ff0f1c542d5..fc541a016c4 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -106,7 +106,10 @@ Bug Fixes 3. SOLR-9,SOLR-99: Tighten up sort specification error checking, throw exceptions for missing sort specifications or a sort on a non-indexed field. (Ryan McKinley via yonik) - + + 4. SOLR-145: Fix for bug introduced in SOLR-104 where some Exceptions + were being ignored by all "out of the box" RequestHandlers. (hossman) + Other Changes 1. diff --git a/src/java/org/apache/solr/handler/RequestHandlerBase.java b/src/java/org/apache/solr/handler/RequestHandlerBase.java index 5729bd404e1..b4a64505039 100644 --- a/src/java/org/apache/solr/handler/RequestHandlerBase.java +++ b/src/java/org/apache/solr/handler/RequestHandlerBase.java @@ -19,6 +19,7 @@ package org.apache.solr.handler; import java.net.URL; +import org.apache.solr.core.SolrCore; import org.apache.solr.core.SolrException; import org.apache.solr.core.SolrInfoMBean; import org.apache.solr.request.SolrParams; @@ -74,12 +75,9 @@ public abstract class RequestHandlerBase implements SolrRequestHandler, SolrInfo try { U.setDefaults(req,defaults,appends,invariants); handleRequestBody( req, rsp ); - } - catch( SolrException se ) { - numErrors++; - throw se; - } - catch( Exception e) { + } catch (Exception e) { + SolrException.log(SolrCore.log,e); + rsp.setException(e); numErrors++; } } diff --git a/src/test/org/apache/solr/BasicFunctionalityTest.java b/src/test/org/apache/solr/BasicFunctionalityTest.java index eecd755158c..fe1ef6ad800 100644 --- a/src/test/org/apache/solr/BasicFunctionalityTest.java +++ b/src/test/org/apache/solr/BasicFunctionalityTest.java @@ -22,6 +22,7 @@ import org.apache.lucene.search.Query; import org.apache.lucene.search.BooleanQuery; import org.apache.solr.core.SolrCore; import org.apache.solr.search.*; +import org.apache.solr.handler.*; import org.apache.solr.request.*; import org.apache.solr.util.*; import org.apache.solr.schema.*; @@ -143,6 +144,27 @@ public class BasicFunctionalityTest extends AbstractSolrTestCase { ); } + public void testRequestHandlerBaseException() { + final String tmp = "BOO!"; + SolrRequestHandler handler = new RequestHandlerBase() { + public String getDescription() { return tmp; } + public String getSourceId() { return tmp; } + public String getSource() { return tmp; } + public String getVersion() { return tmp; } + public void handleRequestBody + ( SolrQueryRequest req, SolrQueryResponse rsp ) { + throw new RuntimeException(tmp); + } + }; + handler.init(new NamedList()); + SolrQueryResponse rsp = new SolrQueryResponse(); + h.getCore().execute(handler, + new LocalSolrQueryRequest(h.getCore(), + new NamedList()), + rsp); + assertNotNull("should have found an exception", rsp.getException()); + + } public void testMultipleUpdatesPerAdd() {