You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by er...@apache.org on 2011/06/17 23:49:38 UTC

svn commit: r1137045 - in /lucene/dev/branches/branch_3x/solr/src: java/org/apache/solr/core/QuerySenderListener.java test-files/solr/conf/solrconfig-querysender-noquery.xml test/org/apache/solr/core/TestQuerySenderNoQuery.java

Author: erick
Date: Fri Jun 17 21:49:38 2011
New Revision: 1137045

URL: http://svn.apache.org/viewvc?rev=1137045&view=rev
Log: (empty)

Added:
    lucene/dev/branches/branch_3x/solr/src/test-files/solr/conf/solrconfig-querysender-noquery.xml
    lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/core/TestQuerySenderNoQuery.java
Modified:
    lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/core/QuerySenderListener.java

Modified: lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/core/QuerySenderListener.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/core/QuerySenderListener.java?rev=1137045&r1=1137044&r2=1137045&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/core/QuerySenderListener.java (original)
+++ lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/core/QuerySenderListener.java Fri Jun 17 21:49:38 2011
@@ -39,7 +39,9 @@ class QuerySenderListener extends Abstra
   public void newSearcher(SolrIndexSearcher newSearcher, SolrIndexSearcher currentSearcher) {
     final SolrIndexSearcher searcher = newSearcher;
     log.info("QuerySenderListener sending requests to " + newSearcher);
-    for (NamedList nlst : (List<NamedList>)args.get("queries")) {
+    List<NamedList> allLists = (List<NamedList>)args.get("queries");
+    if (allLists == null) return;
+    for (NamedList nlst : allLists) {
       try {
         // bind the request to a particular searcher (the newSearcher)
         NamedList params = addEventParms(currentSearcher, nlst);

Added: lucene/dev/branches/branch_3x/solr/src/test-files/solr/conf/solrconfig-querysender-noquery.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/solr/src/test-files/solr/conf/solrconfig-querysender-noquery.xml?rev=1137045&view=auto
==============================================================================
--- lucene/dev/branches/branch_3x/solr/src/test-files/solr/conf/solrconfig-querysender-noquery.xml (added)
+++ lucene/dev/branches/branch_3x/solr/src/test-files/solr/conf/solrconfig-querysender-noquery.xml Fri Jun 17 21:49:38 2011
@@ -0,0 +1,79 @@
+<?xml version="1.0" ?>
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- $Id: solrconfig-querysender.xml 1048886 2010-12-14 01:10:52Z hossman $
+     $Source$
+     $Name$
+  -->
+
+<config>
+  <luceneMatchVersion>${tests.luceneMatchVersion:LUCENE_CURRENT}</luceneMatchVersion>
+  <!--  The DirectoryFactory to use for indexes.
+solr.StandardDirectoryFactory, the default, is filesystem based.
+solr.RAMDirectoryFactory is memory based and not persistent. -->
+  <directoryFactory name="Dir�ctoryFactory" class="${solr.directoryFactory:solr.RAMDirectoryFactory}"/>
+
+  <updateHandler class="solr.DirectUpdateHandler2">
+    <listener event="postCommit"
+              class="org.apache.solr.core.MockEventListener"/>
+    <listener event="postOptimize"
+              class="org.apache.solr.core.MockEventListener"/>
+  </updateHandler>
+
+  <query>
+
+
+    <!-- a newSearcher event is fired whenever a new searcher is being prepared
+and there is a current searcher handling requests (aka registered). -->
+    <!-- QuerySenderListener takes an array of NamedList and executes a
+         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> <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>
+    <listener event="newSearcher"
+              class="org.apache.solr.core.MockEventListener"/>
+
+
+    <!-- a firstSearcher event is fired whenever a new searcher is being
+         prepared but there is no current registered searcher to handle
+         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>
+          <str name="qt">mock</str>
+        </lst>
+      </arr>
+      -->
+    </listener>
+    <listener event="firstSearcher"
+              class="org.apache.solr.core.MockEventListener"/>
+
+
+  </query>
+  <requestHandler name="mock" class="org.apache.solr.core.MockQuerySenderListenerReqHandler" default="true">
+    <!-- default values for query parameters -->
+
+  </requestHandler>
+</config>

Added: lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/core/TestQuerySenderNoQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/core/TestQuerySenderNoQuery.java?rev=1137045&view=auto
==============================================================================
--- lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/core/TestQuerySenderNoQuery.java (added)
+++ lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/core/TestQuerySenderNoQuery.java Fri Jun 17 21:49:38 2011
@@ -0,0 +1,90 @@
+package org.apache.solr.core;
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.lucene.store.Directory;
+import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.common.params.EventParams;
+import org.apache.solr.search.SolrIndexSearcher;
+import org.apache.solr.search.TestExtendedDismaxParser;
+import org.apache.solr.util.RefCounted;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class TestQuerySenderNoQuery extends SolrTestCaseJ4 {
+
+  // number of instances configured in the solrconfig.xml
+  private static final int EXPECTED_MOCK_LISTENER_INSTANCES = 4;
+
+  private static int preInitMockListenerCount = 0;
+
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    // record current value prior to core initialization
+    // so we can verify the correct number of instances later
+    // NOTE: this won't work properly if concurrent tests run
+    // in the same VM
+    preInitMockListenerCount = MockEventListener.getCreateCount();
+
+    initCore("solrconfig-querysender-noquery.xml","schema.xml");
+  }
+
+  public void testListenerCreationCounts() {
+    SolrCore core = h.getCore();
+
+    assertEquals("Unexpected number of listeners created",
+                 EXPECTED_MOCK_LISTENER_INSTANCES,
+                 MockEventListener.getCreateCount() - preInitMockListenerCount);
+  }
+
+  @Test
+  public void testRequestHandlerRegistry() {
+    // property values defined in build.xml
+    SolrCore core = h.getCore();
+
+    assertEquals( 2, core.firstSearcherListeners.size() );
+    assertEquals( 2, core.newSearcherListeners.size() );
+  }
+
+  // Determine that when the query lists are commented out of both new and
+  // first searchers in the config, we don't throw an NPE
+  @Test
+  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;
+
+    RefCounted<SolrIndexSearcher> currentSearcherRef = core.getSearcher();
+    SolrIndexSearcher currentSearcher = currentSearcherRef.get();
+    SolrIndexSearcher dummy = null;
+    qsl.newSearcher(currentSearcher, dummy);//test first Searcher (since param is null)
+    MockQuerySenderListenerReqHandler mock = (MockQuerySenderListenerReqHandler) core.getRequestHandler("mock");
+    assertNotNull("Mock is null", mock);
+    assertNull("Req (firstsearcher) is not null", mock.req);
+
+    Directory dir = currentSearcher.getIndexReader().directory();
+    SolrIndexSearcher newSearcher = new SolrIndexSearcher(core, core.getSchema(), "testQuerySenderNoQuery", dir, true, false);
+
+    qsl.newSearcher(newSearcher, currentSearcher); // get newSearcher.
+    assertNull("Req (newsearcher) is not null", mock.req);
+    newSearcher.close();
+    currentSearcherRef.decref();
+  }
+
+}