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 yo...@apache.org on 2008/07/21 18:18:22 UTC
svn commit: r678457 - in /lucene/solr/trunk/src:
java/org/apache/solr/handler/component/ java/org/apache/solr/spelling/
test/org/apache/solr/spelling/
Author: yonik
Date: Mon Jul 21 09:18:21 2008
New Revision: 678457
URL: http://svn.apache.org/viewvc?rev=678457&view=rev
Log:
SOLR-640: spellcheck reference leaks
Modified:
lucene/solr/trunk/src/java/org/apache/solr/handler/component/SpellCheckComponent.java
lucene/solr/trunk/src/java/org/apache/solr/spelling/FileBasedSpellChecker.java
lucene/solr/trunk/src/java/org/apache/solr/spelling/IndexBasedSpellChecker.java
lucene/solr/trunk/src/java/org/apache/solr/spelling/SolrSpellChecker.java
lucene/solr/trunk/src/test/org/apache/solr/spelling/FileBasedSpellCheckerTest.java
lucene/solr/trunk/src/test/org/apache/solr/spelling/IndexBasedSpellCheckerTest.java
Modified: lucene/solr/trunk/src/java/org/apache/solr/handler/component/SpellCheckComponent.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/handler/component/SpellCheckComponent.java?rev=678457&r1=678456&r2=678457&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/handler/component/SpellCheckComponent.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/handler/component/SpellCheckComponent.java Mon Jul 21 09:18:21 2008
@@ -102,7 +102,7 @@
}
SolrSpellChecker spellChecker = getSpellChecker(params);
if (params.getBool(SPELLCHECK_BUILD, false)) {
- spellChecker.build(rb.req.getCore());
+ spellChecker.build(rb.req.getCore(), rb.req.getSearcher());
rb.rsp.add("command", "build");
} else if (params.getBool(SPELLCHECK_RELOAD, false)) {
spellChecker.reload();
Modified: lucene/solr/trunk/src/java/org/apache/solr/spelling/FileBasedSpellChecker.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/spelling/FileBasedSpellChecker.java?rev=678457&r1=678456&r2=678457&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/spelling/FileBasedSpellChecker.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/spelling/FileBasedSpellChecker.java Mon Jul 21 09:18:21 2008
@@ -36,6 +36,7 @@
import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.util.HighFrequencyDictionary;
+import org.apache.solr.search.SolrIndexSearcher;
/**
@@ -65,7 +66,7 @@
return name;
}
- public void build(SolrCore core) {
+ public void build(SolrCore core, SolrIndexSearcher searcher) {
try {
loadExternalFileDictionary(core.getSchema(), core.getResourceLoader());
spellChecker.clearIndex();
Modified: lucene/solr/trunk/src/java/org/apache/solr/spelling/IndexBasedSpellChecker.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/spelling/IndexBasedSpellChecker.java?rev=678457&r1=678456&r2=678457&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/spelling/IndexBasedSpellChecker.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/spelling/IndexBasedSpellChecker.java Mon Jul 21 09:18:21 2008
@@ -69,12 +69,11 @@
}
}
- public void build(SolrCore core) {
+ public void build(SolrCore core, SolrIndexSearcher searcher) {
IndexReader reader = null;
try {
if (sourceLocation == null) {
// Load from Solr's index
- SolrIndexSearcher searcher = core.getSearcher().get();
reader = searcher.getReader();
} else {
// Load from Lucene index at given sourceLocation
Modified: lucene/solr/trunk/src/java/org/apache/solr/spelling/SolrSpellChecker.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/spelling/SolrSpellChecker.java?rev=678457&r1=678456&r2=678457&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/spelling/SolrSpellChecker.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/spelling/SolrSpellChecker.java Mon Jul 21 09:18:21 2008
@@ -22,6 +22,7 @@
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrResourceLoader;
+import org.apache.solr.search.SolrIndexSearcher;
import java.io.IOException;
import java.util.Collection;
@@ -67,10 +68,8 @@
/**
* (re)Build The Spelling index. May be a NOOP if the ipmlementation doesn't require building, or can't be rebuilt
- *
- * @param core The SolrCore
*/
- public abstract void build(SolrCore core);
+ public abstract void build(SolrCore core, SolrIndexSearcher searcher);
/**
* Assumes count = 1, onlyMorePopular = false, extendedResults = false
Modified: lucene/solr/trunk/src/test/org/apache/solr/spelling/FileBasedSpellCheckerTest.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/spelling/FileBasedSpellCheckerTest.java?rev=678457&r1=678456&r2=678457&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/spelling/FileBasedSpellCheckerTest.java (original)
+++ lucene/solr/trunk/src/test/org/apache/solr/spelling/FileBasedSpellCheckerTest.java Mon Jul 21 09:18:21 2008
@@ -72,7 +72,7 @@
SolrCore core = h.getCore();
String dictName = checker.init(spellchecker, core.getResourceLoader());
assertTrue(dictName + " is not equal to " + "external", dictName.equals("external") == true);
- checker.build(core);
+ checker.build(core, null);
IndexReader reader = core.getSearcher().get().getReader();
Collection<Token> tokens = queryConverter.convert("fob");
@@ -110,7 +110,7 @@
SolrCore core = h.getCore();
String dictName = checker.init(spellchecker, core.getResourceLoader());
assertTrue(dictName + " is not equal to " + "external", dictName.equals("external") == true);
- checker.build(core);
+ checker.build(core, null);
IndexReader reader = core.getSearcher().get().getReader();
Collection<Token> tokens = queryConverter.convert("Solar");
@@ -151,7 +151,7 @@
SolrCore core = h.getCore();
String dictName = checker.init(spellchecker, core.getResourceLoader());
assertTrue(dictName + " is not equal to " + "external", dictName.equals("external") == true);
- checker.build(core);
+ checker.build(core, null);
IndexReader reader = core.getSearcher().get().getReader();
Collection<Token> tokens = queryConverter.convert("solar");
Modified: lucene/solr/trunk/src/test/org/apache/solr/spelling/IndexBasedSpellCheckerTest.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/spelling/IndexBasedSpellCheckerTest.java?rev=678457&r1=678456&r2=678457&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/spelling/IndexBasedSpellCheckerTest.java (original)
+++ lucene/solr/trunk/src/test/org/apache/solr/spelling/IndexBasedSpellCheckerTest.java Mon Jul 21 09:18:21 2008
@@ -43,6 +43,8 @@
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.SolrCore;
import org.apache.solr.util.AbstractSolrTestCase;
+import org.apache.solr.util.RefCounted;
+import org.apache.solr.search.SolrIndexSearcher;
import java.io.File;
import java.util.Collection;
@@ -105,9 +107,12 @@
String dictName = checker.init(spellchecker, core.getResourceLoader());
assertTrue(dictName + " is not equal to " + SolrSpellChecker.DEFAULT_DICTIONARY_NAME,
dictName.equals(SolrSpellChecker.DEFAULT_DICTIONARY_NAME) == true);
- checker.build(core);
+ RefCounted<SolrIndexSearcher> holder = core.getSearcher();
+ SolrIndexSearcher searcher = holder.get();
+ try {
+ checker.build(core, searcher);
- IndexReader reader = core.getSearcher().get().getReader();
+ IndexReader reader = searcher.getReader();
Collection<Token> tokens = queryConverter.convert("documemt");
SpellingResult result = checker.getSuggestions(tokens, reader);
assertTrue("result is null and it shouldn't be", result != null);
@@ -155,6 +160,9 @@
entry = suggestions.entrySet().iterator().next();
assertTrue(entry.getKey() + " is equal to " + "bug and it shouldn't be", entry.getKey().equals("bug") == false);
assertTrue(entry.getValue() + " does not equal: " + SpellingResult.NO_FREQUENCY_INFO, entry.getValue() == SpellingResult.NO_FREQUENCY_INFO);
+ } finally {
+ holder.decref();
+ }
}
public void testExtendedResults() throws Exception {
@@ -172,9 +180,12 @@
String dictName = checker.init(spellchecker, core.getResourceLoader());
assertTrue(dictName + " is not equal to " + SolrSpellChecker.DEFAULT_DICTIONARY_NAME,
dictName.equals(SolrSpellChecker.DEFAULT_DICTIONARY_NAME) == true);
- checker.build(core);
+ RefCounted<SolrIndexSearcher> holder = core.getSearcher();
+ SolrIndexSearcher searcher = holder.get();
+ try {
+ checker.build(core, searcher);
- IndexReader reader = core.getSearcher().get().getReader();
+ IndexReader reader = searcher.getReader();
Collection<Token> tokens = queryConverter.convert("documemt");
SpellingResult result = checker.getSuggestions(tokens, reader, 1, false, true);
assertTrue("result is null and it shouldn't be", result != null);
@@ -198,6 +209,9 @@
assertTrue("result is null and it shouldn't be", result != null);
suggestions = result.get(tokens.iterator().next());
assertTrue("suggestions is not null and it should be", suggestions == null);
+ } finally {
+ holder.decref();
+ }
}
private class TestSpellChecker extends IndexBasedSpellChecker{
@@ -222,12 +236,18 @@
String dictName = checker.init(spellchecker, core.getResourceLoader());
assertTrue(dictName + " is not equal to " + SolrSpellChecker.DEFAULT_DICTIONARY_NAME,
dictName.equals(SolrSpellChecker.DEFAULT_DICTIONARY_NAME) == true);
- checker.build(core);
+ RefCounted<SolrIndexSearcher> holder = core.getSearcher();
+ SolrIndexSearcher searcher = holder.get();
+ try {
+ checker.build(core, searcher);
SpellChecker sc = checker.getSpellChecker();
assertTrue("sc is null and it shouldn't be", sc != null);
StringDistance sd = sc.getStringDistance();
assertTrue("sd is null and it shouldn't be", sd != null);
assertTrue("sd is not an instance of " + JaroWinklerDistance.class.getName(), sd instanceof JaroWinklerDistance);
+ } finally {
+ holder.decref();
+ }
}
public void testAlternateLocation() throws Exception {
@@ -266,9 +286,12 @@
String dictName = checker.init(spellchecker, core.getResourceLoader());
assertTrue(dictName + " is not equal to " + SolrSpellChecker.DEFAULT_DICTIONARY_NAME,
dictName.equals(SolrSpellChecker.DEFAULT_DICTIONARY_NAME) == true);
- checker.build(core);
+ RefCounted<SolrIndexSearcher> holder = core.getSearcher();
+ SolrIndexSearcher searcher = holder.get();
+ try {
+ checker.build(core, searcher);
- IndexReader reader = core.getSearcher().get().getReader();
+ IndexReader reader = searcher.getReader();
Collection<Token> tokens = queryConverter.convert("flesh");
SpellingResult result = checker.getSuggestions(tokens, reader, 1, false, true);
assertTrue("result is null and it shouldn't be", result != null);
@@ -292,7 +315,9 @@
assertTrue("result is null and it shouldn't be", result != null);
suggestions = result.get(tokens.iterator().next());
assertTrue("suggestions is not null and it should be", suggestions == null);
-
+ } finally {
+ holder.decref();
+ }
}
}