You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2012/04/22 17:01:55 UTC

svn commit: r1328890 - in /lucene/dev/trunk/solr/core/src: java/org/apache/solr/update/DirectUpdateHandler2.java test/org/apache/solr/search/TestIndexSearcher.java

Author: yonik
Date: Sun Apr 22 15:01:55 2012
New Revision: 1328890

URL: http://svn.apache.org/viewvc?rev=1328890&view=rev
Log:
SOLR-3392: fix search leak when openSearcher=false

Modified:
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java?rev=1328890&r1=1328889&r2=1328890&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java Sun Apr 22 15:01:55 2012
@@ -440,7 +440,8 @@ public class DirectUpdateHandler2 extend
             core.getSearcher(true, false, waitSearcher);
           } else {
             // force open a new realtime searcher so realtime-get and versioning code can see the latest
-            core.openNewSearcher(true,true);
+            RefCounted<SolrIndexSearcher> searchHolder = core.openNewSearcher(true, true);
+            searchHolder.decref();
           }
           if (ulog != null) ulog.postSoftCommit(cmd);
         }

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java?rev=1328890&r1=1328889&r2=1328890&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java Sun Apr 22 15:01:55 2012
@@ -129,4 +129,33 @@ public class TestIndexSearcher extends S
     sr5.close();
     sr6.close();
   }
+
+
+  // make sure we don't leak searchers (SOLR-3391)
+  public void testCloses() {
+    assertU(adoc("id","1"));
+    assertU(commit("openSearcher","false"));  // this was enough to trigger SOLR-3391
+
+    int maxDoc = random().nextInt(20) + 1;
+
+    // test different combinations of commits
+    for (int i=0; i<100; i++) {
+
+      if (random().nextInt(100) < 50) {
+        String id = Integer.toString(random().nextInt(maxDoc));
+        assertU(adoc("id",id));
+      } else {
+        boolean soft = random().nextBoolean();
+        boolean optimize = random().nextBoolean();
+        boolean openSearcher = random().nextBoolean();
+
+        if (optimize) {
+          assertU(optimize("openSearcher",""+openSearcher, "softCommit",""+soft));
+        } else {
+          assertU(commit("openSearcher",""+openSearcher, "softCommit",""+soft));
+        }
+      }
+    }
+
+  }
 }