You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2018/06/07 16:52:45 UTC
lucene-solr:branch_7x: SOLR-12142: EmbeddedSolrServer should use
req.getContentWriter
Repository: lucene-solr
Updated Branches:
refs/heads/branch_7x 9d48bd9d2 -> 41d04e6e2
SOLR-12142: EmbeddedSolrServer should use req.getContentWriter
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/41d04e6e
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/41d04e6e
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/41d04e6e
Branch: refs/heads/branch_7x
Commit: 41d04e6e22e1841cb88ba9812d9826939a7c3d81
Parents: 9d48bd9
Author: Noble Paul <no...@apache.org>
Authored: Fri Jun 8 02:38:50 2018 +1000
Committer: Noble Paul <no...@apache.org>
Committed: Fri Jun 8 02:52:30 2018 +1000
----------------------------------------------------------------------
.../src/java/org/apache/solr/api/ApiBag.java | 6 +--
.../solrj/embedded/EmbeddedSolrServer.java | 54 +++++++++++++++-----
.../tagger/EmbeddedSolrNoSerializeTest.java | 11 ++--
.../request/ContentStreamUpdateRequest.java | 26 ++++++++--
.../solrj/request/schema/SchemaRequest.java | 23 +++++++++
5 files changed, 95 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/41d04e6e/solr/core/src/java/org/apache/solr/api/ApiBag.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/api/ApiBag.java b/solr/core/src/java/org/apache/solr/api/ApiBag.java
index 0c0d54b..8a3f972 100644
--- a/solr/core/src/java/org/apache/solr/api/ApiBag.java
+++ b/solr/core/src/java/org/apache/solr/api/ApiBag.java
@@ -35,7 +35,9 @@ import org.apache.solr.common.SolrException;
import org.apache.solr.common.SpecProvider;
import org.apache.solr.common.util.CommandOperation;
import org.apache.solr.common.util.ContentStream;
+import org.apache.solr.common.util.JsonSchemaValidator;
import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.util.PathTrie;
import org.apache.solr.common.util.Utils;
import org.apache.solr.common.util.ValidatingJsonMap;
import org.apache.solr.core.PluginBag;
@@ -45,8 +47,6 @@ import org.apache.solr.request.SolrRequestHandler;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.security.AuthorizationContext;
import org.apache.solr.security.PermissionNameProvider;
-import org.apache.solr.common.util.JsonSchemaValidator;
-import org.apache.solr.common.util.PathTrie;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -288,7 +288,7 @@ public class ApiBag {
try {
parsedCommands = CommandOperation.readCommands(Collections.singleton(stream), new NamedList());
} catch (IOException e) {
- throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Unable to parse commands");
+ throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Unable to parse commands",e);
}
if (validators == null || !validate) { // no validation possible because we do not have a spec
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/41d04e6e/solr/core/src/java/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java b/solr/core/src/java/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java
index 90eb0d1..81cf374 100644
--- a/solr/core/src/java/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java
+++ b/solr/core/src/java/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java
@@ -20,7 +20,10 @@ import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Path;
+import java.util.Collection;
import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
import com.google.common.base.Strings;
import org.apache.commons.io.output.ByteArrayOutputStream;
@@ -30,12 +33,15 @@ import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.StreamingResponseCallback;
import org.apache.solr.client.solrj.impl.BinaryRequestWriter;
import org.apache.solr.client.solrj.impl.BinaryRequestWriter.BAOS;
+import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest;
+import org.apache.solr.client.solrj.request.RequestWriter;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.ContentStreamBase;
import org.apache.solr.common.util.JavaBinCodec;
import org.apache.solr.common.util.NamedList;
@@ -130,19 +136,8 @@ public class EmbeddedSolrServer extends SolrClient {
SolrRequestHandler handler = coreContainer.getRequestHandler(path);
if (handler != null) {
try {
- SolrQueryRequest req = _parser.buildRequestFrom(null, request.getParams(), Collections.singleton(new ContentStreamBase() {
- @Override
- public InputStream getStream() throws IOException {
- BAOS baos = new BAOS();
- new BinaryRequestWriter().write(request, baos);
- return new ByteArrayInputStream(baos.getbuf());
- }
- @Override
- public String getContentType() {
- return CommonParams.JAVABIN_MIME;
-
- }
- }));
+ SolrQueryRequest req = _parser.buildRequestFrom(null, request.getParams(), getContentStreams(request));
+ req.getContext().put("httpMethod", request.getMethod().name());
req.getContext().put(PATH, path);
SolrQueryResponse resp = new SolrQueryResponse();
handler.handleRequest(req, resp);
@@ -187,7 +182,7 @@ public class EmbeddedSolrServer extends SolrClient {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "unknown handler: " + path);
}
- req = _parser.buildRequestFrom(core, params, request.getContentStreams());
+ req = _parser.buildRequestFrom(core, params, getContentStreams(request));
req.getContext().put(PATH, path);
req.getContext().put("httpMethod", request.getMethod().name());
SolrQueryResponse rsp = new SolrQueryResponse();
@@ -242,6 +237,37 @@ public class EmbeddedSolrServer extends SolrClient {
}
}
+ private Set<ContentStream> getContentStreams(SolrRequest request) throws IOException {
+ if (request.getMethod() == SolrRequest.METHOD.GET) return null;
+ if (request instanceof ContentStreamUpdateRequest) {
+ ContentStreamUpdateRequest csur = (ContentStreamUpdateRequest) request;
+ Collection<ContentStream> cs = csur.getContentStreams();
+ if (cs != null) return new HashSet<>(cs);
+ }
+ RequestWriter.ContentWriter contentWriter = request.getContentWriter(CommonParams.JAVABIN_MIME);
+ final String cType = contentWriter == null ? CommonParams.JAVABIN_MIME : contentWriter.getContentType();
+
+ return Collections.singleton(new ContentStreamBase() {
+
+ @Override
+ public InputStream getStream() throws IOException {
+ BAOS baos = new BAOS();
+ if (contentWriter != null) {
+ contentWriter.write(baos);
+ } else {
+ new BinaryRequestWriter().write(request, baos);
+ }
+ return new ByteArrayInputStream(baos.toByteArray());
+ }
+
+ @Override
+ public String getContentType() {
+ return cType;
+
+ }
+ });
+ }
+
private JavaBinCodec createJavaBinCodec(final StreamingResponseCallback callback, final BinaryResponseWriter.Resolver resolver) {
return new JavaBinCodec(resolver) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/41d04e6e/solr/core/src/test/org/apache/solr/handler/tagger/EmbeddedSolrNoSerializeTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/handler/tagger/EmbeddedSolrNoSerializeTest.java b/solr/core/src/test/org/apache/solr/handler/tagger/EmbeddedSolrNoSerializeTest.java
index 8d31ad0..37b8207 100644
--- a/solr/core/src/test/org/apache/solr/handler/tagger/EmbeddedSolrNoSerializeTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/tagger/EmbeddedSolrNoSerializeTest.java
@@ -34,6 +34,7 @@ import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.StreamingResponseCallback;
import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
import org.apache.solr.client.solrj.request.QueryRequest;
+import org.apache.solr.client.solrj.request.RequestWriter;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
@@ -99,11 +100,11 @@ public class EmbeddedSolrNoSerializeTest extends SolrTestCaseJ4 {
return Collections.singleton(new ContentStreamBase.StringStream(input));
}
- // As of 7.2. But won't work until: https://issues.apache.org/jira/browse/SOLR-12142
-// @Override
-// public RequestWriter.ContentWriter getContentWriter(String expectedType) {
-// return new RequestWriter.StringPayloadContentWriter(input, "text/plain; charset=UTF8");
-// }
+ // As of 7.2. But won't work until: https://issues.apache.org/jira/browse/SOLR-12142
+ @Override
+ public RequestWriter.ContentWriter getContentWriter(String expectedType) {
+ return new RequestWriter.StringPayloadContentWriter(input, "text/plain; charset=UTF8");
+ }
}
@Test
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/41d04e6e/solr/solrj/src/java/org/apache/solr/client/solrj/request/ContentStreamUpdateRequest.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/request/ContentStreamUpdateRequest.java b/solr/solrj/src/java/org/apache/solr/client/solrj/request/ContentStreamUpdateRequest.java
index f0e0b3c..28d7874 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/request/ContentStreamUpdateRequest.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/ContentStreamUpdateRequest.java
@@ -15,15 +15,18 @@
* limitations under the License.
*/
package org.apache.solr.client.solrj.request;
-import org.apache.solr.common.util.ContentStream;
-import org.apache.solr.common.util.ContentStreamBase;
-import java.io.IOException;
import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import org.apache.commons.io.IOUtils;
+import org.apache.solr.common.util.ContentStream;
+import org.apache.solr.common.util.ContentStreamBase;
+
/**
* Basic functionality to upload a File or {@link org.apache.solr.common.util.ContentStream} to a Solr Cell or some
@@ -51,6 +54,23 @@ public class ContentStreamUpdateRequest extends AbstractUpdateRequest {
return contentStreams;
}
+ @Override
+ public RequestWriter.ContentWriter getContentWriter(String expectedType) {
+ if (contentStreams == null || contentStreams.isEmpty() || contentStreams.size() > 1) return null;
+ ContentStream stream = contentStreams.get(0);
+ return new RequestWriter.ContentWriter() {
+ @Override
+ public void write(OutputStream os) throws IOException {
+ IOUtils.copy(stream.getStream(), os);
+ }
+
+ @Override
+ public String getContentType() {
+ return stream.getContentType();
+ }
+ };
+ }
+
/**
* Add a File to the {@link org.apache.solr.common.util.ContentStream}s.
* @param file The File to add.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/41d04e6e/solr/solrj/src/java/org/apache/solr/client/solrj/request/schema/SchemaRequest.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/request/schema/SchemaRequest.java b/solr/solrj/src/java/org/apache/solr/client/solrj/request/schema/SchemaRequest.java
index 29db3bb..6c63bb4 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/request/schema/SchemaRequest.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/schema/SchemaRequest.java
@@ -17,6 +17,8 @@
package org.apache.solr.client.solrj.request.schema;
import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
@@ -25,7 +27,9 @@ import java.util.List;
import java.util.Map;
import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.request.RequestWriter;
import org.apache.solr.client.solrj.response.schema.SchemaResponse;
+import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.ContentStreamBase;
@@ -706,6 +710,7 @@ public class SchemaRequest extends AbstractSchemaRequest<SchemaResponse> {
protected abstract NamedList<Object> getRequestParameters();
@Override
+ @Deprecated
public Collection<ContentStream> getContentStreams() throws IOException {
CharArr json = new CharArr();
new SchemaRequestJSONWriter(json).write(getRequestParameters());
@@ -713,6 +718,24 @@ public class SchemaRequest extends AbstractSchemaRequest<SchemaResponse> {
}
@Override
+ public RequestWriter.ContentWriter getContentWriter(String expectedType) {
+ return new RequestWriter.ContentWriter() {
+ @Override
+ public void write(OutputStream os) throws IOException {
+ //TODO : find a way to do streaming write
+ CharArr json = new CharArr();
+ new SchemaRequestJSONWriter(json).write(getRequestParameters());
+ os.write(json.toString().getBytes(StandardCharsets.UTF_8));
+ }
+
+ @Override
+ public String getContentType() {
+ return CommonParams.JSON_MIME;
+ }
+ };
+ }
+
+ @Override
protected SchemaResponse.UpdateResponse createResponse(SolrClient client) {
return new SchemaResponse.UpdateResponse();
}