mirror of https://github.com/apache/lucene.git
SOLR-13130: during the ResponseBuilder.STAGE_GET_FIELDS directly copy string bytes and avoid creating String Objects
This commit is contained in:
parent
000785e68e
commit
250d21da94
|
@ -183,6 +183,8 @@ Optimizations
|
||||||
This gives a lower absolute score but doesn't affect ordering, as this is a constant factor which is the same
|
This gives a lower absolute score but doesn't affect ordering, as this is a constant factor which is the same
|
||||||
for every document. Use LegacyBM25SimilarityFactory if you need the old 6.x/7.x scoring. See also upgrade notes (janhoy)
|
for every document. Use LegacyBM25SimilarityFactory if you need the old 6.x/7.x scoring. See also upgrade notes (janhoy)
|
||||||
|
|
||||||
|
* SOLR-13130: during the ResponseBuilder.STAGE_GET_FIELDS directly copy string bytes and avoid creating String Objects (noble)
|
||||||
|
|
||||||
Other Changes
|
Other Changes
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@ import java.util.function.Predicate;
|
||||||
import org.apache.solr.client.solrj.SolrRequest;
|
import org.apache.solr.client.solrj.SolrRequest;
|
||||||
import org.apache.solr.client.solrj.SolrResponse;
|
import org.apache.solr.client.solrj.SolrResponse;
|
||||||
import org.apache.solr.client.solrj.SolrServerException;
|
import org.apache.solr.client.solrj.SolrServerException;
|
||||||
|
import org.apache.solr.client.solrj.impl.BinaryResponseParser;
|
||||||
import org.apache.solr.client.solrj.impl.Http2SolrClient;
|
import org.apache.solr.client.solrj.impl.Http2SolrClient;
|
||||||
import org.apache.solr.client.solrj.impl.LBSolrClient;
|
import org.apache.solr.client.solrj.impl.LBSolrClient;
|
||||||
import org.apache.solr.client.solrj.request.QueryRequest;
|
import org.apache.solr.client.solrj.request.QueryRequest;
|
||||||
|
@ -53,6 +54,7 @@ import org.apache.solr.common.params.CommonParams;
|
||||||
import org.apache.solr.common.params.ModifiableSolrParams;
|
import org.apache.solr.common.params.ModifiableSolrParams;
|
||||||
import org.apache.solr.common.params.ShardParams;
|
import org.apache.solr.common.params.ShardParams;
|
||||||
import org.apache.solr.common.params.SolrParams;
|
import org.apache.solr.common.params.SolrParams;
|
||||||
|
import org.apache.solr.common.util.JavaBinCodec;
|
||||||
import org.apache.solr.common.util.NamedList;
|
import org.apache.solr.common.util.NamedList;
|
||||||
import org.apache.solr.common.util.StrUtils;
|
import org.apache.solr.common.util.StrUtils;
|
||||||
import org.apache.solr.core.CoreDescriptor;
|
import org.apache.solr.core.CoreDescriptor;
|
||||||
|
@ -62,6 +64,8 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.slf4j.MDC;
|
import org.slf4j.MDC;
|
||||||
|
|
||||||
|
import static org.apache.solr.handler.component.ShardRequest.PURPOSE_GET_FIELDS;
|
||||||
|
|
||||||
public class HttpShardHandler extends ShardHandler {
|
public class HttpShardHandler extends ShardHandler {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -132,6 +136,13 @@ public class HttpShardHandler extends ShardHandler {
|
||||||
return urls;
|
return urls;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final BinaryResponseParser READ_STR_AS_CHARSEQ_PARSER = new BinaryResponseParser() {
|
||||||
|
@Override
|
||||||
|
protected JavaBinCodec createCodec() {
|
||||||
|
return new JavaBinCodec(null, stringCache).setReadStringAsCharSeq(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void submit(final ShardRequest sreq, final String shard, final ModifiableSolrParams params) {
|
public void submit(final ShardRequest sreq, final String shard, final ModifiableSolrParams params) {
|
||||||
// do this outside of the callable for thread safety reasons
|
// do this outside of the callable for thread safety reasons
|
||||||
|
@ -158,6 +169,9 @@ public class HttpShardHandler extends ShardHandler {
|
||||||
SolrRequestInfo requestInfo = SolrRequestInfo.getRequestInfo();
|
SolrRequestInfo requestInfo = SolrRequestInfo.getRequestInfo();
|
||||||
if (requestInfo != null) req.setUserPrincipal(requestInfo.getReq().getUserPrincipal());
|
if (requestInfo != null) req.setUserPrincipal(requestInfo.getReq().getUserPrincipal());
|
||||||
|
|
||||||
|
if (sreq.purpose == PURPOSE_GET_FIELDS) {
|
||||||
|
req.setResponseParser(READ_STR_AS_CHARSEQ_PARSER);
|
||||||
|
}
|
||||||
// no need to set the response parser as binary is the default
|
// no need to set the response parser as binary is the default
|
||||||
// req.setResponseParser(new BinaryResponseParser());
|
// req.setResponseParser(new BinaryResponseParser());
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ import java.io.Reader;
|
||||||
public class BinaryResponseParser extends ResponseParser {
|
public class BinaryResponseParser extends ResponseParser {
|
||||||
public static final String BINARY_CONTENT_TYPE = "application/octet-stream";
|
public static final String BINARY_CONTENT_TYPE = "application/octet-stream";
|
||||||
|
|
||||||
private JavaBinCodec.StringCache stringCache;
|
protected JavaBinCodec.StringCache stringCache;
|
||||||
|
|
||||||
public BinaryResponseParser setStringCache(JavaBinCodec.StringCache cache) {
|
public BinaryResponseParser setStringCache(JavaBinCodec.StringCache cache) {
|
||||||
this.stringCache = cache;
|
this.stringCache = cache;
|
||||||
|
@ -47,13 +47,17 @@ public class BinaryResponseParser extends ResponseParser {
|
||||||
@Override
|
@Override
|
||||||
public NamedList<Object> processResponse(InputStream body, String encoding) {
|
public NamedList<Object> processResponse(InputStream body, String encoding) {
|
||||||
try {
|
try {
|
||||||
return (NamedList<Object>) new JavaBinCodec(null,stringCache).unmarshal(body);
|
return (NamedList<Object>) createCodec().unmarshal(body);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "parsing error", e);
|
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "parsing error", e);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected JavaBinCodec createCodec() {
|
||||||
|
return new JavaBinCodec(null, stringCache);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getContentType() {
|
public String getContentType() {
|
||||||
return BINARY_CONTENT_TYPE;
|
return BINARY_CONTENT_TYPE;
|
||||||
|
|
Loading…
Reference in New Issue