You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by gs...@apache.org on 2009/08/05 23:25:06 UTC

svn commit: r801417 - in /lucene/solr/trunk: ./ src/common/org/apache/solr/common/params/ src/java/org/apache/solr/core/ src/test/org/apache/solr/core/ src/test/test-files/solr/conf/

Author: gsingers
Date: Wed Aug  5 21:25:06 2009
New Revision: 801417

URL: http://svn.apache.org/viewvc?rev=801417&view=rev
Log:
SOLR-1237: firstSearcher and newSearcher now identify themselves as such when querying

Added:
    lucene/solr/trunk/src/common/org/apache/solr/common/params/EventParams.java   (with props)
    lucene/solr/trunk/src/test/org/apache/solr/core/MockQuerySenderListenerReqHandler.java   (with props)
Modified:
    lucene/solr/trunk/CHANGES.txt
    lucene/solr/trunk/src/java/org/apache/solr/core/AbstractSolrEventListener.java
    lucene/solr/trunk/src/java/org/apache/solr/core/QuerySenderListener.java
    lucene/solr/trunk/src/java/org/apache/solr/core/SolrEventListener.java
    lucene/solr/trunk/src/test/org/apache/solr/core/TestQuerySenderListener.java
    lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig-querysender.xml

Modified: lucene/solr/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/CHANGES.txt?rev=801417&r1=801416&r2=801417&view=diff
==============================================================================
--- lucene/solr/trunk/CHANGES.txt (original)
+++ lucene/solr/trunk/CHANGES.txt Wed Aug  5 21:25:06 2009
@@ -254,6 +254,10 @@
     that allows disabling of english possessive stemming (removal of trailing 's from tokens)
     (Robert Muir via yonik)
 
+66. SOLR-1237: firstSearcher and newSearcher can now be identified via the CommonParams.EVENT (evt) parameter in a request.  This allows a
+  RequestHandler or SearchComponent to know when a newSearcher or firstSearcher event happened.  QuerySenderListender is the only implementation
+  in Solr that implements this, but outside implementations may wish to.  See the AbstractSolrEventListener for a helper method. (gsingers)
+
 
 Optimizations
 ----------------------

Added: lucene/solr/trunk/src/common/org/apache/solr/common/params/EventParams.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/common/org/apache/solr/common/params/EventParams.java?rev=801417&view=auto
==============================================================================
--- lucene/solr/trunk/src/common/org/apache/solr/common/params/EventParams.java (added)
+++ lucene/solr/trunk/src/common/org/apache/solr/common/params/EventParams.java Wed Aug  5 21:25:06 2009
@@ -0,0 +1,13 @@
+package org.apache.solr.common.params;
+
+
+/**
+ *
+ *
+ **/
+public interface EventParams {
+  /** Event param for things like newSearcher, firstSearcher**/
+  public static final String EVENT = "event";
+  public static final String NEW_SEARCHER = "newSearcher";
+  public static final String FIRST_SEARCHER = "firstSearcher";
+}

Propchange: lucene/solr/trunk/src/common/org/apache/solr/common/params/EventParams.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: lucene/solr/trunk/src/java/org/apache/solr/core/AbstractSolrEventListener.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/core/AbstractSolrEventListener.java?rev=801417&r1=801416&r2=801417&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/core/AbstractSolrEventListener.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/core/AbstractSolrEventListener.java Wed Aug  5 21:25:06 2009
@@ -18,6 +18,7 @@
 package org.apache.solr.core;
 
 import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.params.EventParams;
 import org.apache.solr.search.SolrIndexSearcher;
 
 /**
@@ -44,4 +45,25 @@
   public String toString() {
     return getClass().getName() + args;
   }
+
+  /**
+   * Add the {@link org.apache.solr.common.params.EventParams#EVENT} with either the {@link org.apache.solr.common.params.EventParams#NEW_SEARCHER}
+   * or {@link org.apache.solr.common.params.EventParams#FIRST_SEARCHER} values depending on the value of currentSearcher.
+   * <p/>
+   * Makes a copy of NamedList and then adds the parameters.
+   *
+   *
+   * @param currentSearcher If null, add FIRST_SEARCHER, otherwise NEW_SEARCHER
+   * @param nlst The named list to add the EVENT value to
+   */
+  protected NamedList addEventParms(SolrIndexSearcher currentSearcher, NamedList nlst) {
+    NamedList result = new NamedList();
+    result.addAll(nlst);
+    if (currentSearcher != null) {
+      result.add(EventParams.EVENT, EventParams.NEW_SEARCHER);
+    } else {
+      result.add(EventParams.EVENT, EventParams.FIRST_SEARCHER);
+    }
+    return result;
+  }
 }

Modified: lucene/solr/trunk/src/java/org/apache/solr/core/QuerySenderListener.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/core/QuerySenderListener.java?rev=801417&r1=801416&r2=801417&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/core/QuerySenderListener.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/core/QuerySenderListener.java Wed Aug  5 21:25:06 2009
@@ -42,7 +42,8 @@
     for (NamedList nlst : (List<NamedList>)args.get("queries")) {
       try {
         // bind the request to a particular searcher (the newSearcher)
-        LocalSolrQueryRequest req = new LocalSolrQueryRequest(core,nlst) {
+        NamedList params = addEventParms(currentSearcher, nlst);
+        LocalSolrQueryRequest req = new LocalSolrQueryRequest(core,params) {
           @Override public SolrIndexSearcher getSearcher() { return searcher; }
           @Override public void close() { }
         };
@@ -75,5 +76,4 @@
   }
 
 
-
 }

Modified: lucene/solr/trunk/src/java/org/apache/solr/core/SolrEventListener.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/core/SolrEventListener.java?rev=801417&r1=801416&r2=801417&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/core/SolrEventListener.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/core/SolrEventListener.java Wed Aug  5 21:25:06 2009
@@ -36,6 +36,28 @@
   /** The searchers passed here are only guaranteed to be valid for the duration
    * of this method call, so care should be taken not to spawn threads or asynchronous
    * tasks with references to these searchers.
+   * <p/>
+   * Implementations should add the {@link org.apache.solr.common.params.EventParams#EVENT} parameter and set it to a value of either:
+   * <ul>
+   * <li>{@link org.apache.solr.common.params.EventParams#FIRST_SEARCHER} - First Searcher event</li>
+   * <li>{@link org.apache.solr.common.params.EventParams#NEW_SEARCHER} - New Searcher event</li>
+   * </ul>
+   *
+   * Sample:
+   * <pre>
+    if (currentSearcher != null) {
+      nlst.add(CommonParams.EVENT, CommonParams.NEW_SEARCHER);
+    } else {
+      nlst.add(CommonParams.EVENT, CommonParams.FIRST_SEARCHER);
+    }
+   *
+   * </pre>
+   *
+   * @see org.apache.solr.core.AbstractSolrEventListener#addEventParms(org.apache.solr.search.SolrIndexSearcher, org.apache.solr.common.util.NamedList) 
+   *
+   * @param newSearcher The new {@link org.apache.solr.search.SolrIndexSearcher} to use
+   * @param currentSearcher The existing {@link org.apache.solr.search.SolrIndexSearcher}.  null if this is a firstSearcher event.
+   *
    */
   public void newSearcher(SolrIndexSearcher newSearcher, SolrIndexSearcher currentSearcher);
 

Added: lucene/solr/trunk/src/test/org/apache/solr/core/MockQuerySenderListenerReqHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/core/MockQuerySenderListenerReqHandler.java?rev=801417&view=auto
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/core/MockQuerySenderListenerReqHandler.java (added)
+++ lucene/solr/trunk/src/test/org/apache/solr/core/MockQuerySenderListenerReqHandler.java Wed Aug  5 21:25:06 2009
@@ -0,0 +1,40 @@
+package org.apache.solr.core;
+
+import org.apache.solr.handler.RequestHandlerBase;
+import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.request.SolrQueryResponse;
+
+
+/**
+ *
+ *
+ **/
+public class MockQuerySenderListenerReqHandler extends RequestHandlerBase {
+  public SolrQueryRequest req;
+  public SolrQueryResponse rsp;
+
+  public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {
+    this.req = req;
+    this.rsp = rsp;
+  }
+
+  public String getDescription() {
+    String result = null;
+    return result;
+  }
+
+  public String getSourceId() {
+    String result = null;
+    return result;
+  }
+
+  public String getSource() {
+    String result = null;
+    return result;
+  }
+
+  public String getVersion() {
+    String result = null;
+    return result;
+  }
+}

Propchange: lucene/solr/trunk/src/test/org/apache/solr/core/MockQuerySenderListenerReqHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: lucene/solr/trunk/src/test/org/apache/solr/core/TestQuerySenderListener.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/core/TestQuerySenderListener.java?rev=801417&r1=801416&r2=801417&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/core/TestQuerySenderListener.java (original)
+++ lucene/solr/trunk/src/test/org/apache/solr/core/TestQuerySenderListener.java Wed Aug  5 21:25:06 2009
@@ -17,11 +17,10 @@
 
 package org.apache.solr.core;
 
-import org.apache.solr.handler.RequestHandlerBase;
-import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
-import org.apache.solr.request.SolrRequestHandler;
 import org.apache.solr.util.AbstractSolrTestCase;
+import org.apache.solr.search.SolrIndexSearcher;
+import org.apache.solr.common.params.EventParams;
+import org.apache.lucene.store.Directory;
 
 public class TestQuerySenderListener extends AbstractSolrTestCase {
 
@@ -35,5 +34,28 @@
     assertEquals( 1, core.firstSearcherListeners.size() );
     assertEquals( 1, core.newSearcherListeners.size() );
   }
+
+  public void testSearcherEvents() throws Exception {
+    SolrCore core = h.getCore();
+    SolrEventListener newSearcherListener = core.newSearcherListeners.get(0);
+    assertTrue("Not an instance of QuerySenderListener", newSearcherListener instanceof QuerySenderListener);
+    QuerySenderListener qsl = (QuerySenderListener) newSearcherListener;
+
+    SolrIndexSearcher currentSearcher = core.getSearcher().get();
+    qsl.newSearcher(currentSearcher, null);//test new Searcher
+    MockQuerySenderListenerReqHandler mock = (MockQuerySenderListenerReqHandler) core.getRequestHandler("mock");
+    assertNotNull("Mock is null", mock);
+    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);
+    Directory dir = currentSearcher.getReader().directory();
+    SolrIndexSearcher newSearcher = new SolrIndexSearcher(core, core.getSchema(), "testQuerySenderListener", dir, true, false);
+
+    qsl.newSearcher(newSearcher, currentSearcher);
+    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);
+  }
+
 }
 

Modified: lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig-querysender.xml
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig-querysender.xml?rev=801417&r1=801416&r2=801417&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig-querysender.xml (original)
+++ lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig-querysender.xml Wed Aug  5 21:25:06 2009
@@ -34,8 +34,8 @@
          local query request for each NamedList in sequence. -->
     <listener event="newSearcher" class="solr.QuerySenderListener">
       <arr name="queries">
-        <lst> <str name="q">solr</str> <str name="start">0</str> <str name="rows">10</str> </lst>
-        <lst> <str name="q">rocks</str> <str name="start">0</str> <str name="rows">10</str> </lst>
+        <lst> <str name="q">solr</str> <str name="start">0</str> <str name="rows">10</str> <str name="qt">mock</str></lst>
+        <lst> <str name="q">rocks</str> <str name="start">0</str> <str name="rows">10</str> <str name="qt">mock</str></lst>
       </arr>
     </listener>
 
@@ -44,10 +44,15 @@
          requests or to gain prewarming data from. -->
     <listener event="firstSearcher" class="solr.QuerySenderListener">
       <arr name="queries">
-        <lst> <str name="q">fast_warm</str> <str name="start">0</str> <str name="rows">10</str> </lst>
+        <lst> <str name="q">fast_warm</str> <str name="start">0</str> <str name="rows">10</str>
+          <str name="qt">mock</str>
+        </lst>
       </arr>
     </listener>
   
   </query>
-  
+  <requestHandler name="mock" class="org.apache.solr.core.MockQuerySenderListenerReqHandler" default="true">
+    <!-- default values for query parameters -->
+
+  </requestHandler>
 </config>