You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2020/08/20 19:07:38 UTC
[lucene-solr] branch reference_impl_dev updated: @588 Hit the
transformer.
This is an automated email from the ASF dual-hosted git repository.
markrmiller pushed a commit to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/reference_impl_dev by this push:
new e054997 @588 Hit the transformer.
e054997 is described below
commit e054997bc6a8f326d8203bc3aa810aa5055e0ebe
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Thu Aug 20 14:07:20 2020 -0500
@588 Hit the transformer.
---
.../solr/handler/component/QueryElevationComponent.java | 2 +-
.../java/org/apache/solr/request/SolrQueryRequestBase.java | 4 ++--
.../java/org/apache/solr/response/XSLTResponseWriter.java | 4 ++--
.../java/org/apache/solr/util/xslt/TransformerProvider.java | 13 +++++++------
4 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java b/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
index 4c2c077..a4cce6b 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
@@ -670,7 +670,7 @@ public class QueryElevationComponent extends SearchComponent implements SolrCore
assert priority == 1; // the last priority (lowest)
}
- if (context != null) {
+ if (context != null && boostDocs != null) {
//noinspection unchecked
context.put(BOOSTED_DOCIDS, boostDocs);
}
diff --git a/solr/core/src/java/org/apache/solr/request/SolrQueryRequestBase.java b/solr/core/src/java/org/apache/solr/request/SolrQueryRequestBase.java
index ed6f953..ad08930 100644
--- a/solr/core/src/java/org/apache/solr/request/SolrQueryRequestBase.java
+++ b/solr/core/src/java/org/apache/solr/request/SolrQueryRequestBase.java
@@ -22,6 +22,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import org.apache.solr.api.ApiBag;
import org.apache.solr.common.SolrException;
@@ -78,8 +79,7 @@ public abstract class SolrQueryRequestBase implements SolrQueryRequest, Closeabl
@Override
public Map<Object,Object> getContext() {
- // SolrQueryRequest as a whole isn't thread safe, and this isn't either.
- if (context==null) context = new HashMap<>();
+ if (context==null) context = new ConcurrentHashMap<>();
return context;
}
diff --git a/solr/core/src/java/org/apache/solr/response/XSLTResponseWriter.java b/solr/core/src/java/org/apache/solr/response/XSLTResponseWriter.java
index 1bf260e..98284eb 100644
--- a/solr/core/src/java/org/apache/solr/response/XSLTResponseWriter.java
+++ b/solr/core/src/java/org/apache/solr/response/XSLTResponseWriter.java
@@ -48,7 +48,7 @@ public class XSLTResponseWriter implements QueryResponseWriter {
public static final String DEFAULT_CONTENT_TYPE = "application/xml";
public static final String CONTEXT_TRANSFORMER_KEY = "xsltwriter.transformer";
- private Integer xsltCacheLifetimeSeconds = null;
+ private volatile Integer xsltCacheLifetimeSeconds = null;
public static final int XSLT_CACHE_DEFAULT = 60;
private static final String XSLT_CACHE_PARAM = "xsltCacheLifetimeSeconds";
@@ -97,7 +97,7 @@ public class XSLTResponseWriter implements QueryResponseWriter {
final Transformer t = getTransformer(request);
// capture the output of the XMLWriter
- final CharArrayWriter w = new CharArrayWriter();
+ final CharArrayWriter w = new CharArrayWriter(64);
XMLWriter.writeResponse(w,request,response);
// and write transformed result to our writer
diff --git a/solr/core/src/java/org/apache/solr/util/xslt/TransformerProvider.java b/solr/core/src/java/org/apache/solr/util/xslt/TransformerProvider.java
index ea90054..9c1b9b7 100644
--- a/solr/core/src/java/org/apache/solr/util/xslt/TransformerProvider.java
+++ b/solr/core/src/java/org/apache/solr/util/xslt/TransformerProvider.java
@@ -22,6 +22,7 @@ import org.apache.solr.common.ParWork;
import org.apache.solr.common.util.TimeSource;
import org.apache.solr.common.util.XMLErrorLogger;
import org.apache.solr.core.SolrConfig;
+import org.apache.solr.core.XmlConfigFile;
import org.apache.solr.util.SystemIdResolver;
import org.apache.solr.util.TimeOut;
import org.slf4j.Logger;
@@ -45,9 +46,9 @@ import java.util.concurrent.TimeUnit;
*/
public class TransformerProvider {
- private String lastFilename;
- private Templates lastTemplates = null;
- private TimeOut cacheExpiresTimeout;
+ private volatile String lastFilename;
+ private volatile Templates lastTemplates = null;
+ private volatile TimeOut cacheExpiresTimeout;
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private static final XMLErrorLogger xmllog = new XMLErrorLogger(log);
@@ -66,7 +67,7 @@ public class TransformerProvider {
/** Return a new Transformer, possibly created from our cached Templates object
* @throws IOException If there is a low-level I/O error.
*/
- public synchronized Transformer getTransformer(SolrConfig solrConfig, String filename,int cacheLifetimeSeconds) throws IOException {
+ public Transformer getTransformer(SolrConfig solrConfig, String filename,int cacheLifetimeSeconds) throws IOException {
// For now, the Templates are blindly reloaded once cacheExpires is over.
// It'd be better to check the file modification time to reload only if needed.
if(lastTemplates!=null && filename.equals(lastFilename) &&
@@ -75,7 +76,7 @@ public class TransformerProvider {
log.debug("Using cached Templates:{}", filename);
}
} else {
- lastTemplates = getTemplates(solrConfig.getResourceLoader(), filename,cacheLifetimeSeconds);
+ lastTemplates = getTemplates(solrConfig.getResourceLoader(), filename, cacheLifetimeSeconds);
}
Transformer result = null;
@@ -100,7 +101,7 @@ public class TransformerProvider {
log.debug("compiling XSLT templates:{}", filename);
}
final String fn = "xslt/" + filename;
- final TransformerFactory tFactory = TransformerFactory.newInstance();
+ final TransformerFactory tFactory = XmlConfigFile.tfactory;
tFactory.setURIResolver(new SystemIdResolver(loader).asURIResolver());
tFactory.setErrorListener(xmllog);
final StreamSource src = new StreamSource(loader.openResource(fn),