You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by th...@apache.org on 2014/10/02 16:57:56 UTC
svn commit: r1628988 - in /lucene/dev/branches/branch_5x/solr:
core/src/java/org/apache/solr/servlet/
solrj/src/java/org/apache/solr/client/solrj/impl/
solrj/src/java/org/apache/solr/common/
Author: thelabdude
Date: Thu Oct 2 14:57:55 2014
New Revision: 1628988
URL: http://svn.apache.org/r1628988
Log:
SOLR-6550: Provide simple mechanism for passing additional metadata / context about a server-side SolrException back to the client-side
Modified:
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/ResponseUtils.java
lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateSolrServer.java
lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrServer.java
lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/SolrException.java
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/ResponseUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/ResponseUtils.java?rev=1628988&r1=1628987&r2=1628988&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/ResponseUtils.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/ResponseUtils.java Thu Oct 2 14:57:55 2014
@@ -40,7 +40,11 @@ public class ResponseUtils {
public static int getErrorInfo(Throwable ex, NamedList info, Logger log) {
int code = 500;
if (ex instanceof SolrException) {
- code = ((SolrException)ex).code();
+ SolrException solrExc = (SolrException)ex;
+ code = solrExc.code();
+ NamedList<String> errorMetadata = solrExc.getMetadata();
+ if (errorMetadata != null)
+ info.add("metadata", errorMetadata);
}
for (Throwable th = ex; th != null; th = th.getCause()) {
Modified: lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateSolrServer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateSolrServer.java?rev=1628988&r1=1628987&r2=1628988&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateSolrServer.java (original)
+++ lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateSolrServer.java Thu Oct 2 14:57:55 2014
@@ -237,7 +237,22 @@ public class ConcurrentUpdateSolrServer
msg.append(response.getStatusLine().getReasonPhrase());
msg.append("\n\n\n\n");
msg.append("request: ").append(method.getURI());
- handleError(new SolrException(ErrorCode.getErrorCode(statusCode), msg.toString()));
+
+ SolrException solrExc = new SolrException(ErrorCode.getErrorCode(statusCode), msg.toString());
+ // parse out the metadata from the SolrException
+ try {
+ NamedList<Object> resp =
+ server.parser.processResponse(response.getEntity().getContent(),
+ response.getEntity().getContentType().getValue());
+ NamedList<Object> error = (NamedList<Object>) resp.get("error");
+ if (error != null)
+ solrExc.setMetadata((NamedList<String>) error.get("metadata"));
+ } catch (Exception exc) {
+ // don't want to fail to report error if parsing the response fails
+ log.warn("Failed to parse error response from "+server.getBaseURL()+" due to: "+exc);
+ }
+
+ handleError(solrExc);
} else {
onSuccess(response);
}
Modified: lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrServer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrServer.java?rev=1628988&r1=1628987&r2=1628988&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrServer.java (original)
+++ lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrServer.java Thu Oct 2 14:57:55 2014
@@ -548,6 +548,7 @@ public class HttpSolrServer extends Solr
throw new RemoteSolrException(httpStatus, e.getMessage(), e);
}
if (httpStatus != HttpStatus.SC_OK) {
+ NamedList<String> metadata = null;
String reason = null;
try {
NamedList err = (NamedList) rsp.get("error");
@@ -556,6 +557,7 @@ public class HttpSolrServer extends Solr
if(reason == null) {
reason = (String) err.get("trace");
}
+ metadata = (NamedList<String>)err.get("metadata");
}
} catch (Exception ex) {}
if (reason == null) {
@@ -565,7 +567,9 @@ public class HttpSolrServer extends Solr
msg.append("request: " + method.getURI());
reason = java.net.URLDecoder.decode(msg.toString(), UTF_8);
}
- throw new RemoteSolrException(httpStatus, reason, null);
+ RemoteSolrException rss = new RemoteSolrException(httpStatus, reason, null);
+ if (metadata != null) rss.setMetadata(metadata);
+ throw rss;
}
success = true;
return rsp;
Modified: lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/SolrException.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/SolrException.java?rev=1628988&r1=1628987&r2=1628988&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/SolrException.java (original)
+++ lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/SolrException.java Thu Oct 2 14:57:55 2014
@@ -23,6 +23,7 @@ import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.apache.solr.common.util.NamedList;
import org.slf4j.Logger;
/**
@@ -86,6 +87,7 @@ public class SolrException extends Runti
}
int code=0;
+ protected NamedList<String> metadata;
/**
* The HTTP Status code associated with this Exception. For SolrExceptions
@@ -98,6 +100,26 @@ public class SolrException extends Runti
*/
public int code() { return code; }
+ public void setMetadata(NamedList<String> metadata) {
+ this.metadata = metadata;
+ }
+
+ public NamedList<String> getMetadata() {
+ return metadata;
+ }
+
+ public String getMetadata(String key) {
+ return (metadata != null && key != null) ? metadata.get(key) : null;
+ }
+
+ public void setMetadata(String key, String value) {
+ if (key == null || value == null)
+ throw new IllegalArgumentException("Exception metadata cannot be null!");
+
+ if (metadata == null)
+ metadata = new NamedList<String>();
+ metadata.add(key, value);
+ }
public void log(Logger log) { log(log,this); }
public static void log(Logger log, Throwable e) {