You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2015/05/25 14:42:42 UTC

svn commit: r1681585 - in /lucene/dev/trunk/solr: core/src/test/org/apache/solr/util/TestObjectReleaseTracker.java solrj/src/java/org/apache/solr/common/util/ObjectReleaseTracker.java test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java

Author: markrmiller
Date: Mon May 25 12:42:41 2015
New Revision: 1681585

URL: http://svn.apache.org/r1681585
Log:
SOLR-7589: A few improvements to the ObjectReleaseTracker to make test fail debugging a little easier.

Modified:
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/util/TestObjectReleaseTracker.java
    lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/util/ObjectReleaseTracker.java
    lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/util/TestObjectReleaseTracker.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/util/TestObjectReleaseTracker.java?rev=1681585&r1=1681584&r2=1681585&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/util/TestObjectReleaseTracker.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/util/TestObjectReleaseTracker.java Mon May 25 12:42:41 2015
@@ -30,12 +30,12 @@ public class TestObjectReleaseTracker ex
   public void testObjectReleaseTracker() {
     ObjectReleaseTracker.track(new Object());
     ObjectReleaseTracker.release(new Object());
-    assertFalse(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
-    assertTrue(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
+    assertNotNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
+    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
     Object obj = new Object();
     ObjectReleaseTracker.track(obj);
     ObjectReleaseTracker.release(obj);
-    assertTrue(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
+    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
     
     Object obj1 = new Object();
     ObjectReleaseTracker.track(obj1);
@@ -47,7 +47,7 @@ public class TestObjectReleaseTracker ex
     ObjectReleaseTracker.release(obj1);
     ObjectReleaseTracker.release(obj2);
     ObjectReleaseTracker.release(obj3);
-    assertTrue(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
+    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
     
     ObjectReleaseTracker.track(obj1);
     ObjectReleaseTracker.track(obj2);
@@ -56,7 +56,7 @@ public class TestObjectReleaseTracker ex
     ObjectReleaseTracker.release(obj1);
     ObjectReleaseTracker.release(obj2);
     // ObjectReleaseTracker.release(obj3);
-    assertFalse(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
-    assertTrue(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
+    assertNotNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
+    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
   }
 }

Modified: lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/util/ObjectReleaseTracker.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/util/ObjectReleaseTracker.java?rev=1681585&r1=1681584&r2=1681585&view=diff
==============================================================================
--- lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/util/ObjectReleaseTracker.java (original)
+++ lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/util/ObjectReleaseTracker.java Mon May 25 12:42:41 2015
@@ -19,6 +19,7 @@ package org.apache.solr.common.util;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -40,20 +41,30 @@ public class ObjectReleaseTracker {
     return true;
   }
   
-  public static boolean clearObjectTrackerAndCheckEmpty() {
+  /**
+   * @return null if ok else error message
+   */
+  public static String clearObjectTrackerAndCheckEmpty() {
+    String error = null;
     Set<Entry<Object,String>> entries = OBJECTS.entrySet();
     boolean empty = entries.isEmpty();
     if (entries.size() > 0) {
-      System.err.println("ObjectTracker found objects that were not released!!!");
-    }
-    
-    for (Entry<Object,String> entry : entries) {
-      System.err.println(entry.getValue());
+      Set<String> objects = new HashSet<>();
+      for (Entry<Object,String> entry : entries) {
+        objects.add(entry.getKey().getClass().getSimpleName());
+      }
+      
+      error = "ObjectTracker found " + entries.size() + " object(s) that were not released!!! " + objects;
+      
+      System.err.println(error);
+      for (Entry<Object,String> entry : entries) {
+        System.err.println(entry.getValue());
+      }
     }
     
     OBJECTS.clear();
     
-    return empty;
+    return error;
   }
   
   private static class ObjectTrackerException extends RuntimeException {

Modified: lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java?rev=1681585&r1=1681584&r2=1681585&view=diff
==============================================================================
--- lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java (original)
+++ lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java Mon May 25 12:42:41 2015
@@ -230,11 +230,12 @@ public abstract class SolrTestCaseJ4 ext
       deleteCore();
       resetExceptionIgnores();
       endTrackingSearchers();
+      String orr = ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty();
       if (!RandomizedContext.current().getTargetClass().isAnnotationPresent(SuppressObjectReleaseTracker.class)) {
-        assertTrue("Some resources were not closed, shutdown, or released.", ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
+        assertNull(orr, orr);
       } else {
-        if (!ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty()) {
-          log.warn("Some resources were not closed, shutdown, or released. Remove the SuppressObjectReleaseTracker annotation to get more information on the fail.");
+        if (orr != null) {
+          log.warn("Some resources were not closed, shutdown, or released. This has been ignored due to the SuppressObjectReleaseTracker annotation.");
         }
       }
       resetFactory();