You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by Yonik Seeley <yo...@apache.org> on 2010/10/19 19:49:14 UTC

Re: svn commit: r1024335 - in /lucene/dev/trunk/solr: ./ src/common/org/apache/solr/common/util/ src/java/org/apache/solr/core/ src/java/org/apache/solr/request/ src/java/org/apache/solr/search/ src/test/org/apache/solr/ src/test/org/apache/solr/util

ack - misplaced quote in my commit...
I'll fix.

-Yonik

On Tue, Oct 19, 2010 at 1:42 PM,  <yo...@apache.org> wrote:
> Author: yonik
> Date: Tue Oct 19 17:42:27 2010
> New Revision: 1024335
>
> URL: http://svn.apache.org/viewvc?rev=1024335&view=rev
> Log:
> tests: src/test/org/apache/solr/util/SolrPluginUtilsTest.javafix resource leak
>
> Removed:
>    lucene/dev/trunk/solr/src/test/org/apache/solr/SolrInfoMBeanTest.java
> Modified:
>    lucene/dev/trunk/solr/src/common/org/apache/solr/common/util/ConcurrentLRUCache.java
>    lucene/dev/trunk/solr/src/java/org/apache/solr/core/QuerySenderListener.java
>    lucene/dev/trunk/solr/src/java/org/apache/solr/request/SolrQueryRequestBase.java
>    lucene/dev/trunk/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java
>    lucene/dev/trunk/solr/src/test/org/apache/solr/SolrTestCaseJ4.java
>    lucene/dev/trunk/solr/src/test/org/apache/solr/util/SolrPluginUtilsTest.java
>    lucene/dev/trunk/solr/testlogging.properties
>
> Modified: lucene/dev/trunk/solr/src/common/org/apache/solr/common/util/ConcurrentLRUCache.java
> URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/common/org/apache/solr/common/util/ConcurrentLRUCache.java?rev=1024335&r1=1024334&r2=1024335&view=diff
> ==============================================================================
> --- lucene/dev/trunk/solr/src/common/org/apache/solr/common/util/ConcurrentLRUCache.java (original)
> +++ lucene/dev/trunk/solr/src/common/org/apache/solr/common/util/ConcurrentLRUCache.java Tue Oct 19 17:42:27 2010
> @@ -59,6 +59,8 @@ public class ConcurrentLRUCache<K,V> {
>   public ConcurrentLRUCache(int upperWaterMark, final int lowerWaterMark, int acceptableWatermark,
>                             int initialSize, boolean runCleanupThread, boolean runNewThreadForCleanup,
>                             EvictionListener<K,V> evictionListener) {
> +log.info("new ConcurrentLRUCache: " + this);
> +
>     if (upperWaterMark < 1) throw new IllegalArgumentException("upperWaterMark must be > 0");
>     if (lowerWaterMark >= upperWaterMark)
>       throw new IllegalArgumentException("lowerWaterMark must be  < upperWaterMark");
> @@ -500,8 +502,9 @@ public class ConcurrentLRUCache<K,V> {
>     }
>   }
>
> - private boolean isDestroyed =  false;
> + private volatile boolean isDestroyed =  false;
>   public void destroy() {
> +    log.info("destroying " + this);
>     try {
>       if(cleanupThread != null){
>         cleanupThread.stopThread();
> @@ -607,7 +610,7 @@ public class ConcurrentLRUCache<K,V> {
>   protected void finalize() throws Throwable {
>     try {
>       if(!isDestroyed){
> -        log.error("ConcurrentLRUCache was not destroyed prior to finalize(), indicates a bug -- POSSIBLE RESOURCE LEAK!!!");
> +        log.error("ConcurrentLRUCache was not destroyed prior to finalize(), indicates a bug -- POSSIBLE RESOURCE LEAK!!! - " + this);
>         destroy();
>       }
>     } finally {
>
> Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/core/QuerySenderListener.java
> URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/core/QuerySenderListener.java?rev=1024335&r1=1024334&r2=1024335&view=diff
> ==============================================================================
> --- lucene/dev/trunk/solr/src/java/org/apache/solr/core/QuerySenderListener.java (original)
> +++ lucene/dev/trunk/solr/src/java/org/apache/solr/core/QuerySenderListener.java Tue Oct 19 17:42:27 2010
> @@ -45,7 +45,7 @@ class QuerySenderListener extends Abstra
>         NamedList params = addEventParms(currentSearcher, nlst);
>         LocalSolrQueryRequest req = new LocalSolrQueryRequest(core,params) {
>           @Override public SolrIndexSearcher getSearcher() { return searcher; }
> -          @Override public void close() { }
> +          // @Override public void close() { }
>         };
>
>         SolrQueryResponse rsp = new SolrQueryResponse();
>
> Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/request/SolrQueryRequestBase.java
> URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/request/SolrQueryRequestBase.java?rev=1024335&r1=1024334&r2=1024335&view=diff
> ==============================================================================
> --- lucene/dev/trunk/solr/src/java/org/apache/solr/request/SolrQueryRequestBase.java (original)
> +++ lucene/dev/trunk/solr/src/java/org/apache/solr/request/SolrQueryRequestBase.java Tue Oct 19 17:42:27 2010
> @@ -232,8 +232,22 @@ public abstract class SolrQueryRequestBa
>       searcherHolder.decref();
>       searcherHolder = null;
>     }
> +    allocator = null;
>   }
>
> +  public volatile Exception allocator;
> +  {
> +    allocator = new RuntimeException("WhoAmI");
> +    allocator.fillInStackTrace();
> +  }
> +  @Override
> +  protected void finalize() throws Throwable {
> +    if (allocator != null) {
> +      SolrException.log(SolrCore.log, "MISSING CLOSE for req allocated at ", allocator);
> +    }
> +  }
> +
> +
>   /** A Collection of ContentStreams passed to the request
>    */
>   public Iterable<ContentStream> getContentStreams() {
> @@ -252,4 +266,6 @@ public abstract class SolrQueryRequestBa
>     return this.getClass().getSimpleName() + '{' + params + '}';
>   }
>
> +
> +
>  }
>
> Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java
> URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java?rev=1024335&r1=1024334&r2=1024335&view=diff
> ==============================================================================
> --- lucene/dev/trunk/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java (original)
> +++ lucene/dev/trunk/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java Tue Oct 19 17:42:27 2010
> @@ -37,6 +37,7 @@ import org.apache.lucene.util.OpenBitSet
>  import java.io.IOException;
>  import java.net.URL;
>  import java.util.*;
> +import java.util.concurrent.ConcurrentHashMap;
>  import java.util.concurrent.atomic.AtomicLong;
>
>  import org.apache.solr.search.function.ValueSource;
> @@ -57,6 +58,8 @@ public class SolrIndexSearcher extends I
>   public static final AtomicLong numOpens = new AtomicLong();
>   public static final AtomicLong numCloses = new AtomicLong();
>
> +  public static Map<SolrIndexSearcher, Throwable> openSearchers = new ConcurrentHashMap<SolrIndexSearcher, Throwable>();
> +
>
>   private static Logger log = LoggerFactory.getLogger(SolrIndexSearcher.class);
>   private final SolrCore core;
> @@ -138,6 +141,7 @@ public class SolrIndexSearcher extends I
>
>   public SolrIndexSearcher(SolrCore core, IndexSchema schema, String name, IndexReader r, boolean closeReader, boolean enableCache) {
>     super(wrap(r));
> +openSearchers.put(this, new RuntimeException("SearcherAlloc").fillInStackTrace());
>     this.reader = (SolrIndexReader)super.getIndexReader();
>     this.core = core;
>     this.schema = schema;
> @@ -228,6 +232,7 @@ public class SolrIndexSearcher extends I
>    * In particular, the underlying reader and any cache's in use are closed.
>    */
>   public void close() throws IOException {
> +    openSearchers.remove(this);
>     if (cachingEnabled) {
>       StringBuilder sb = new StringBuilder();
>       sb.append("Closing ").append(name);
>
> Modified: lucene/dev/trunk/solr/src/test/org/apache/solr/SolrTestCaseJ4.java
> URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/test/org/apache/solr/SolrTestCaseJ4.java?rev=1024335&r1=1024334&r2=1024335&view=diff
> ==============================================================================
> --- lucene/dev/trunk/solr/src/test/org/apache/solr/SolrTestCaseJ4.java (original)
> +++ lucene/dev/trunk/solr/src/test/org/apache/solr/SolrTestCaseJ4.java Tue Oct 19 17:42:27 2010
> @@ -30,6 +30,7 @@ import org.apache.solr.core.SolrConfig;
>  import org.apache.solr.request.LocalSolrQueryRequest;
>  import org.apache.solr.request.SolrQueryRequest;
>  import org.apache.solr.search.SolrIndexSearcher;
> +import org.apache.solr.util.RefCounted;
>  import org.apache.solr.util.TestHarness;
>  import org.junit.AfterClass;
>  import org.junit.BeforeClass;
> @@ -44,6 +45,7 @@ import java.io.StringWriter;
>  import java.util.ArrayList;
>  import java.util.HashSet;
>  import java.util.List;
> +import java.util.Map;
>
>  import static org.junit.Assert.assertEquals;
>  import static org.junit.Assert.fail;
> @@ -64,6 +66,10 @@ public abstract class SolrTestCaseJ4 ext
>   public static void afterClassSolrTestCase() throws Exception {
>     deleteCore();
>     resetExceptionIgnores();
> +    for (Map.Entry<SolrIndexSearcher,Throwable> entry : SolrIndexSearcher.openSearchers.entrySet()) {
> +      log.error("ERROR SEARCHER="+entry.getKey());
> +      SolrException.log(log, "SEARCHER ALLOCED AT ", entry.getValue());
> +    }
>   }
>
>   @Override
> @@ -238,6 +244,10 @@ public abstract class SolrTestCaseJ4 ext
>               ("standard",0,20,"version","2.2");
>     }
>     log.info("####initCore end");
> +
> +    RefCounted<SolrIndexSearcher> holder = h.getCore().getSearcher();
> +    log.info("START SEARCHER REFCOUNT=" + (holder.getRefcount()-1) + " instance="+holder.get());
> +    holder.decref();
>   }
>
>   /** Subclasses that override setUp can optionally call this method
> @@ -264,7 +274,13 @@ public abstract class SolrTestCaseJ4 ext
>    */
>   public static void deleteCore() throws Exception {
>     log.info("###deleteCore" );
> -    if (h != null) { h.close(); }
> +    RefCounted<SolrIndexSearcher> holder = null;
> +
> +    if (h != null) {
> +      holder = h.getCore().getSearcher();
> +      log.info("END SEARCHER REFCOUNT=" + (holder.getRefcount()-1) + " instance="+holder.get());
> +      h.close();
> +    }
>     if (dataDir != null) {
>       String skip = System.getProperty("solr.test.leavedatadir");
>       if (null != skip && 0 != skip.trim().length()) {
> @@ -286,6 +302,12 @@ public abstract class SolrTestCaseJ4 ext
>     lrf = null;
>     configString = schemaString = null;
>
> +
> +    if (holder != null) {
> +      log.info("FINAL SEARCHER REFCOUNT=" + (holder.getRefcount()-1) + " instance="+holder.get());
> +      holder.decref();
> +    }
> +
>     endTrackingSearchers();
>   }
>
>
> Modified: lucene/dev/trunk/solr/src/test/org/apache/solr/util/SolrPluginUtilsTest.java
> URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/test/org/apache/solr/util/SolrPluginUtilsTest.java?rev=1024335&r1=1024334&r2=1024335&view=diff
> ==============================================================================
> --- lucene/dev/trunk/solr/src/test/org/apache/solr/util/SolrPluginUtilsTest.java (original)
> +++ lucene/dev/trunk/solr/src/test/org/apache/solr/util/SolrPluginUtilsTest.java Tue Oct 19 17:42:27 2010
> @@ -66,7 +66,8 @@ public class SolrPluginUtilsTest extends
>     assertU("", adoc("id", "3235", "val_t", "quick green fox"));
>     assertU("", adoc("id", "3236", "val_t", "quick brown fox"));
>     commit();
> -    SolrIndexSearcher srchr = h.getCore().getSearcher().get();
> +    RefCounted<SolrIndexSearcher> holder = h.getCore().getSearcher();
> +    SolrIndexSearcher srchr = holder.get();
>     SolrIndexSearcher.QueryResult qr = new SolrIndexSearcher.QueryResult();
>     SolrIndexSearcher.QueryCommand cmd = new SolrIndexSearcher.QueryCommand();
>     cmd.setQuery(new MatchAllDocsQuery());
> @@ -82,7 +83,7 @@ public class SolrPluginUtilsTest extends
>     for (SolrDocument document : list) {
>       assertNotNull(document.get("val_t"));
>     }
> -    srchr.close();
> +    holder.close();
>   }
>
>   @Test
>
> Modified: lucene/dev/trunk/solr/testlogging.properties
> URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/testlogging.properties?rev=1024335&r1=1024334&r2=1024335&view=diff
> ==============================================================================
> --- lucene/dev/trunk/solr/testlogging.properties (original)
> +++ lucene/dev/trunk/solr/testlogging.properties Tue Oct 19 17:42:27 2010
> @@ -1,4 +1,4 @@
>  handlers=java.util.logging.ConsoleHandler
> -.level=SEVERE
> +.level=INFO
>  java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
>
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org