mirror of https://github.com/apache/lucene.git
SOLR-5636: SolrRequestParsers does some xpath lookups on every request, which can cause concurrency issues.
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1558688 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
330880c57e
commit
c30f4ebd04
|
@ -204,6 +204,9 @@ Bug Fixes
|
||||||
* SOLR-4992: Solr eats OutOfMemoryError exceptions in many cases.
|
* SOLR-4992: Solr eats OutOfMemoryError exceptions in many cases.
|
||||||
(Mark Miller, Daniel Collins)
|
(Mark Miller, Daniel Collins)
|
||||||
|
|
||||||
|
* SOLR-5636: SolrRequestParsers does some xpath lookups on every request, which
|
||||||
|
can cause concurrency issues. (Mark Miller)
|
||||||
|
|
||||||
Optimizations
|
Optimizations
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
|
|
|
@ -80,6 +80,16 @@ public class SolrConfig extends Config {
|
||||||
NOOP
|
NOOP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int multipartUploadLimitKB;
|
||||||
|
|
||||||
|
private int formUploadLimitKB;
|
||||||
|
|
||||||
|
private boolean enableRemoteStreams;
|
||||||
|
|
||||||
|
private boolean handleSelect;
|
||||||
|
|
||||||
|
private boolean addHttpRequestToContext;
|
||||||
|
|
||||||
/** Creates a default instance from the solrconfig.xml. */
|
/** Creates a default instance from the solrconfig.xml. */
|
||||||
public SolrConfig()
|
public SolrConfig()
|
||||||
throws ParserConfigurationException, IOException, SAXException {
|
throws ParserConfigurationException, IOException, SAXException {
|
||||||
|
@ -259,6 +269,22 @@ public class SolrConfig extends Config {
|
||||||
|
|
||||||
updateHandlerInfo = loadUpdatehandlerInfo();
|
updateHandlerInfo = loadUpdatehandlerInfo();
|
||||||
|
|
||||||
|
multipartUploadLimitKB = getInt(
|
||||||
|
"requestDispatcher/requestParsers/@multipartUploadLimitInKB", 2048 );
|
||||||
|
|
||||||
|
formUploadLimitKB = getInt(
|
||||||
|
"requestDispatcher/requestParsers/@formdataUploadLimitInKB", 2048 );
|
||||||
|
|
||||||
|
enableRemoteStreams = getBool(
|
||||||
|
"requestDispatcher/requestParsers/@enableRemoteStreaming", false );
|
||||||
|
|
||||||
|
// Let this filter take care of /select?xxx format
|
||||||
|
handleSelect = getBool(
|
||||||
|
"requestDispatcher/@handleSelect", true );
|
||||||
|
|
||||||
|
addHttpRequestToContext = getBool(
|
||||||
|
"requestDispatcher/requestParsers/@addHttpRequestToContext", false );
|
||||||
|
|
||||||
Config.log.info("Loaded SolrConfig: " + name);
|
Config.log.info("Loaded SolrConfig: " + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -531,4 +557,24 @@ public class SolrConfig extends Config {
|
||||||
loader.reloadLuceneSPI();
|
loader.reloadLuceneSPI();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getMultipartUploadLimitKB() {
|
||||||
|
return multipartUploadLimitKB;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFormUploadLimitKB() {
|
||||||
|
return formUploadLimitKB;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isHandleSelect() {
|
||||||
|
return handleSelect;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAddHttpRequestToContext() {
|
||||||
|
return addHttpRequestToContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEnableRemoteStreams() {
|
||||||
|
return enableRemoteStreams;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,16 +17,16 @@
|
||||||
|
|
||||||
package org.apache.solr.servlet;
|
package org.apache.solr.servlet;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.net.URL;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.charset.CharacterCodingException;
|
import java.nio.charset.CharacterCodingException;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.nio.charset.CharsetDecoder;
|
import java.nio.charset.CharsetDecoder;
|
||||||
import java.nio.charset.CodingErrorAction;
|
import java.nio.charset.CodingErrorAction;
|
||||||
import java.net.URL;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
@ -36,8 +36,6 @@ import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
@ -53,10 +51,12 @@ import org.apache.solr.common.params.SolrParams;
|
||||||
import org.apache.solr.common.util.ContentStream;
|
import org.apache.solr.common.util.ContentStream;
|
||||||
import org.apache.solr.common.util.ContentStreamBase;
|
import org.apache.solr.common.util.ContentStreamBase;
|
||||||
import org.apache.solr.common.util.FastInputStream;
|
import org.apache.solr.common.util.FastInputStream;
|
||||||
import org.apache.solr.core.Config;
|
import org.apache.solr.core.SolrConfig;
|
||||||
import org.apache.solr.core.SolrCore;
|
import org.apache.solr.core.SolrCore;
|
||||||
import org.apache.solr.request.SolrQueryRequest;
|
import org.apache.solr.request.SolrQueryRequest;
|
||||||
import org.apache.solr.request.SolrQueryRequestBase;
|
import org.apache.solr.request.SolrQueryRequestBase;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
|
||||||
public class SolrRequestParsers
|
public class SolrRequestParsers
|
||||||
|
@ -89,7 +89,7 @@ public class SolrRequestParsers
|
||||||
* Pass in an xml configuration. A null configuration will enable
|
* Pass in an xml configuration. A null configuration will enable
|
||||||
* everything with maximum values.
|
* everything with maximum values.
|
||||||
*/
|
*/
|
||||||
public SolrRequestParsers( Config globalConfig ) {
|
public SolrRequestParsers( SolrConfig globalConfig ) {
|
||||||
final int multipartUploadLimitKB, formUploadLimitKB;
|
final int multipartUploadLimitKB, formUploadLimitKB;
|
||||||
if( globalConfig == null ) {
|
if( globalConfig == null ) {
|
||||||
multipartUploadLimitKB = formUploadLimitKB = Integer.MAX_VALUE;
|
multipartUploadLimitKB = formUploadLimitKB = Integer.MAX_VALUE;
|
||||||
|
@ -97,21 +97,16 @@ public class SolrRequestParsers
|
||||||
handleSelect = true;
|
handleSelect = true;
|
||||||
addHttpRequestToContext = false;
|
addHttpRequestToContext = false;
|
||||||
} else {
|
} else {
|
||||||
multipartUploadLimitKB = globalConfig.getInt(
|
multipartUploadLimitKB = globalConfig.getMultipartUploadLimitKB();
|
||||||
"requestDispatcher/requestParsers/@multipartUploadLimitInKB", 2048 );
|
|
||||||
|
|
||||||
formUploadLimitKB = globalConfig.getInt(
|
formUploadLimitKB = globalConfig.getFormUploadLimitKB();
|
||||||
"requestDispatcher/requestParsers/@formdataUploadLimitInKB", 2048 );
|
|
||||||
|
|
||||||
enableRemoteStreams = globalConfig.getBool(
|
enableRemoteStreams = globalConfig.isEnableRemoteStreams();
|
||||||
"requestDispatcher/requestParsers/@enableRemoteStreaming", false );
|
|
||||||
|
|
||||||
// Let this filter take care of /select?xxx format
|
// Let this filter take care of /select?xxx format
|
||||||
handleSelect = globalConfig.getBool(
|
handleSelect = globalConfig.isHandleSelect();
|
||||||
"requestDispatcher/@handleSelect", true );
|
|
||||||
|
|
||||||
addHttpRequestToContext = globalConfig.getBool(
|
addHttpRequestToContext = globalConfig.isAddHttpRequestToContext();
|
||||||
"requestDispatcher/requestParsers/@addHttpRequestToContext", false );
|
|
||||||
}
|
}
|
||||||
init(multipartUploadLimitKB, formUploadLimitKB);
|
init(multipartUploadLimitKB, formUploadLimitKB);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue