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),