You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by tf...@apache.org on 2016/06/28 22:27:24 UTC

lucene-solr:branch_6x: SOLR-8657: Fix SolrRequestInfo error logs if QuerySenderListener is being used

Repository: lucene-solr
Updated Branches:
  refs/heads/branch_6x 723fc1dc8 -> eaabb9dc7


SOLR-8657: Fix SolrRequestInfo error logs if QuerySenderListener is being used


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/eaabb9dc
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/eaabb9dc
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/eaabb9dc

Branch: refs/heads/branch_6x
Commit: eaabb9dc77621cd9386a3b522f23280f52cbb5ce
Parents: 723fc1d
Author: Tomas Fernandez Lobbe <tf...@apache.org>
Authored: Tue Jun 28 13:11:40 2016 -0700
Committer: Tomas Fernandez Lobbe <tf...@apache.org>
Committed: Tue Jun 28 15:11:41 2016 -0700

----------------------------------------------------------------------
 solr/CHANGES.txt                                  |  2 ++
 .../org/apache/solr/core/QuerySenderListener.java | 10 +++++++---
 .../org/apache/solr/request/SolrRequestInfo.java  |  6 +++---
 .../apache/solr/core/TestQuerySenderListener.java | 18 +++++++++++++-----
 4 files changed, 25 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/eaabb9dc/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index d750a27..817d85e 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -57,6 +57,8 @@ Bug Fixes
 * SOLR-9254: GraphTermsQueryQParserPlugin throws NPE when field being searched is not present in segment
   (Joel Bernstein)
 
+* SOLR-8657: Fix SolrRequestInfo error logs if QuerySenderListener is being used (Pascal Chollet, 
+  Tom�s Fern�ndez L�bbe)
 
 Optimizations
 ----------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/eaabb9dc/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java b/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java
index f3c1b4e..a5cda61 100644
--- a/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java
+++ b/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java
@@ -48,9 +48,9 @@ public class QuerySenderListener extends AbstractSolrEventListener {
     log.info("QuerySenderListener sending requests to " + newSearcher);
     List<NamedList> allLists = (List<NamedList>)getArgs().get("queries");
     if (allLists == null) return;
+    boolean createNewReqInfo = SolrRequestInfo.getRequestInfo() == null;
     for (NamedList nlst : allLists) {
       SolrQueryRequest req = null;
-
       try {
         // bind the request to a particular searcher (the newSearcher)
         NamedList params = addEventParms(currentSearcher, nlst);
@@ -64,7 +64,11 @@ public class QuerySenderListener extends AbstractSolrEventListener {
         };
 
         SolrQueryResponse rsp = new SolrQueryResponse();
-        SolrRequestInfo.setRequestInfo(new SolrRequestInfo(req, rsp));
+        if (createNewReqInfo) {
+          // SolrRequerstInfo for this thread could have been transferred from the parent
+          // thread.
+          SolrRequestInfo.setRequestInfo(new SolrRequestInfo(req, rsp));
+        }
         getCore().execute(getCore().getRequestHandler(req.getParams().get(CommonParams.QT)), req, rsp);
 
         // Retrieve the Document instances (not just the ids) to warm
@@ -89,7 +93,7 @@ public class QuerySenderListener extends AbstractSolrEventListener {
         // the failure should have already been logged.
       } finally {
         if (req != null) req.close();
-        SolrRequestInfo.clearRequestInfo();
+        if (createNewReqInfo) SolrRequestInfo.clearRequestInfo();
       }
     }
     log.info("QuerySenderListener done.");

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/eaabb9dc/solr/core/src/java/org/apache/solr/request/SolrRequestInfo.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/request/SolrRequestInfo.java b/solr/core/src/java/org/apache/solr/request/SolrRequestInfo.java
index ac45e31..f759c91 100644
--- a/solr/core/src/java/org/apache/solr/request/SolrRequestInfo.java
+++ b/solr/core/src/java/org/apache/solr/request/SolrRequestInfo.java
@@ -147,7 +147,7 @@ public class SolrRequestInfo {
     return new ExecutorUtil.InheritableThreadLocalProvider() {
       @Override
       public void store(AtomicReference ctx) {
-        SolrRequestInfo me = threadLocal.get();
+        SolrRequestInfo me = SolrRequestInfo.getRequestInfo();
         if (me != null) ctx.set(me);
       }
 
@@ -156,13 +156,13 @@ public class SolrRequestInfo {
         SolrRequestInfo me = (SolrRequestInfo) ctx.get();
         if (me != null) {
           ctx.set(null);
-          threadLocal.set(me);
+          SolrRequestInfo.setRequestInfo(me);
         }
       }
 
       @Override
       public void clean(AtomicReference ctx) {
-        threadLocal.remove();
+        SolrRequestInfo.clearRequestInfo();
       }
     };
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/eaabb9dc/solr/core/src/test/org/apache/solr/core/TestQuerySenderListener.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/core/TestQuerySenderListener.java b/solr/core/src/test/org/apache/solr/core/TestQuerySenderListener.java
index 8f89569..c1eb873 100644
--- a/solr/core/src/test/org/apache/solr/core/TestQuerySenderListener.java
+++ b/solr/core/src/test/org/apache/solr/core/TestQuerySenderListener.java
@@ -18,6 +18,8 @@ package org.apache.solr.core;
 
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.common.params.EventParams;
+import org.apache.solr.common.util.ExecutorUtil;
+import org.apache.solr.request.SolrRequestInfo;
 import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.util.RefCounted;
 import org.junit.BeforeClass;
@@ -38,11 +40,16 @@ public class TestQuerySenderListener extends SolrTestCaseJ4 {
     // in the same VM
     preInitMockListenerCount = MockEventListener.getCreateCount();
 
+    if (usually()) {
+      // This is set by the SolrDispatchFilter, used in Http calls but not Embedded
+      ExecutorUtil.addThreadLocalProvider(SolrRequestInfo.getInheritableThreadLocalProvider());
+    }
     initCore("solrconfig-querysender.xml","schema.xml");
+    
   }
 
   public void testListenerCreationCounts() {
-    SolrCore core = h.getCore();
+    h.getCore();
 
     assertEquals("Unexpected number of listeners created",
                  EXPECTED_MOCK_LISTENER_INSTANCES, 
@@ -73,14 +80,15 @@ public class TestQuerySenderListener extends SolrTestCaseJ4 {
     String evt = mock.req.getParams().get(EventParams.EVENT);
     assertNotNull("Event is null", evt);
     assertTrue(evt + " is not equal to " + EventParams.FIRST_SEARCHER, evt.equals(EventParams.FIRST_SEARCHER) == true);
+    
+    assertU(adoc("id", "1"));
+    assertU(commit());
 
-    SolrIndexSearcher newSearcher = new SolrIndexSearcher(core, core.getNewIndexDir(), core.getLatestSchema(), core.getSolrConfig().indexConfig, "testQuerySenderListener", false, core.getDirectoryFactory());
-
-    qsl.newSearcher(newSearcher, currentSearcher);
+    RefCounted<SolrIndexSearcher> newSearcherRef = core.getSearcher();
     evt = mock.req.getParams().get(EventParams.EVENT);
     assertNotNull("Event is null", evt);
     assertTrue(evt + " is not equal to " + EventParams.NEW_SEARCHER, evt.equals(EventParams.NEW_SEARCHER) == true);
-    newSearcher.close();
+    newSearcherRef.decref();
     currentSearcherRef.decref();
   }