This is an automated email from the ASF dual-hosted git repository.

markrmiller pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/main by this push:
     new 02bb9c7  SOLR-15659: ObjectReleaseTracker is now in the wrong class, 
should leave no grace time. (#316)
02bb9c7 is described below

commit 02bb9c715091af0b4b741c27340abf7ccd4f3204
Author: Mark Robert Miller <[email protected]>
AuthorDate: Thu Oct 7 15:19:25 2021 -0500

    SOLR-15659: ObjectReleaseTracker is now in the wrong class, should leave no 
grace time. (#316)
---
 .../solr/common/util/TestObjectReleaseTracker.java | 20 ++++----
 .../solr/common/util/ObjectReleaseTracker.java     | 20 ++++++++
 .../src/java/org/apache/solr/SolrTestCase.java     | 13 ++++-
 .../src/java/org/apache/solr/SolrTestCaseJ4.java   | 59 ----------------------
 4 files changed, 41 insertions(+), 71 deletions(-)

diff --git 
a/solr/core/src/test/org/apache/solr/common/util/TestObjectReleaseTracker.java 
b/solr/core/src/test/org/apache/solr/common/util/TestObjectReleaseTracker.java
index 692b933..ddb3361 100644
--- 
a/solr/core/src/test/org/apache/solr/common/util/TestObjectReleaseTracker.java
+++ 
b/solr/core/src/test/org/apache/solr/common/util/TestObjectReleaseTracker.java
@@ -36,7 +36,7 @@ public class TestObjectReleaseTracker extends SolrTestCaseJ4 {
     Object obj = new Object();
     ObjectReleaseTracker.track(obj);
     ObjectReleaseTracker.release(obj);
-    assertNull(SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1));
+    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
 
     Object obj1 = new Object();
     ObjectReleaseTracker.track(obj1);
@@ -48,7 +48,7 @@ public class TestObjectReleaseTracker extends SolrTestCaseJ4 {
     ObjectReleaseTracker.release(obj1);
     ObjectReleaseTracker.release(obj2);
     ObjectReleaseTracker.release(obj3);
-    assertNull(SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1));
+    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
   }
 
   @Test
@@ -65,22 +65,22 @@ public class TestObjectReleaseTracker extends 
SolrTestCaseJ4 {
     ObjectReleaseTracker.release(obj2);
     // ObjectReleaseTracker.release(obj3);
 
-    assertNotNull(SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1));
-    assertNull(SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1));
+    assertNotNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
+    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
   }
 
   @Test
   public void testReleaseDifferentObject() {
     ObjectReleaseTracker.track(new Object());
     ObjectReleaseTracker.release(new Object());
-    assertNotNull(SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1));
-    assertNull(SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1));
+    assertNotNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
+    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
   }
 
   @Test
   public void testAnonymousClasses() {
     ObjectReleaseTracker.track(new Object() {});
-    String message = SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1);
+    String message = ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty();
     MatcherAssert.assertThat(message, containsString("[Object]"));
   }
 
@@ -94,7 +94,7 @@ public class TestObjectReleaseTracker extends SolrTestCaseJ4 {
     });
 
     result.get(); // make sure that track has been called
-    String message = SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1);
+    String message = ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty();
     MatcherAssert.assertThat(message, stringContainsInOrder(
         ObjectReleaseTracker.ObjectTrackerException.class.getName(),
         "Exception: Submitter stack trace",
@@ -110,7 +110,7 @@ public class TestObjectReleaseTracker extends 
SolrTestCaseJ4 {
 
     result.get();
     indirectResult.get().get();
-    message = SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1);
+    message = ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty();
     MatcherAssert.assertThat(message, stringContainsInOrder(
         ObjectReleaseTracker.ObjectTrackerException.class.getName(),
         "Exception: Submitter stack trace",
@@ -130,7 +130,7 @@ public class TestObjectReleaseTracker extends 
SolrTestCaseJ4 {
     result.get();
     indirectResult.get().get();
     indirectIndirect.get().get();
-    message = SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1);
+    message = ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty();
     MatcherAssert.assertThat(message, stringContainsInOrder(
         ObjectReleaseTracker.ObjectTrackerException.class.getName(),
         "Exception: Submitter stack trace",
diff --git 
a/solr/solrj/src/java/org/apache/solr/common/util/ObjectReleaseTracker.java 
b/solr/solrj/src/java/org/apache/solr/common/util/ObjectReleaseTracker.java
index 59927b1..316136f 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/ObjectReleaseTracker.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/ObjectReleaseTracker.java
@@ -22,6 +22,8 @@ import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.lang.invoke.MethodHandles;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.concurrent.ConcurrentHashMap;
@@ -32,6 +34,15 @@ import org.slf4j.LoggerFactory;
 
 public class ObjectReleaseTracker {
   private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+  private static final List<String> DEFAULT_STACK_FILTERS = Arrays.asList(new 
String [] {
+      "org.junit.",
+      "junit.framework.",
+      "sun.",
+      "java.lang.reflect.",
+      "com.carrotsearch.randomizedtesting.",
+  });
+
   public static final Map<Object, Exception> OBJECTS = new 
ConcurrentHashMap<>();
   
   public static boolean track(Object object) {
@@ -97,6 +108,15 @@ public class ObjectReleaseTracker {
       }
     }
   }
+
+  /**
+   * @return null if ok else error message
+   */
+  public static String clearObjectTrackerAndCheckEmpty() {
+    String result = ObjectReleaseTracker.checkEmpty();
+    ObjectReleaseTracker.clear();
+    return result;
+  }
   
   static class ObjectTrackerException extends RuntimeException {
     ObjectTrackerException(String msg, Throwable submitter) {
diff --git a/solr/test-framework/src/java/org/apache/solr/SolrTestCase.java 
b/solr/test-framework/src/java/org/apache/solr/SolrTestCase.java
index b215c69..0cda87b 100644
--- a/solr/test-framework/src/java/org/apache/solr/SolrTestCase.java
+++ b/solr/test-framework/src/java/org/apache/solr/SolrTestCase.java
@@ -25,6 +25,7 @@ import 
com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util.QuickPatchThreadsFilter;
 import org.apache.lucene.util.VerifyTestClassNamingConvention;
+import org.apache.solr.common.util.ObjectReleaseTracker;
 import org.apache.solr.servlet.SolrDispatchFilter;
 import org.apache.solr.util.ExternalPaths;
 import org.apache.solr.util.RevertDefaultThreadHandlerRule;
@@ -73,7 +74,7 @@ public class SolrTestCase extends LuceneTestCase {
    * on completion of the test suite
    * </p>
    * @see <a 
href="https://issues.apache.org/jira/browse/SOLR-14247";>SOLR-14247</a>
-   * @see #shutdownLogger
+   * @see #afterSolrTestCase()
    */
   private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
@@ -149,7 +150,15 @@ public class SolrTestCase extends LuceneTestCase {
   }
   
   @AfterClass
-  public static void shutdownLogger() throws Exception {
+  public static void afterSolrTestCase() throws Exception {
+    if (suiteFailureMarker.wasSuccessful()) {
+      // if the tests passed, make sure everything was closed / released
+      String orr = ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty();
+      assertNull(orr, orr);
+    } else {
+      ObjectReleaseTracker.tryClose();
+    }
     StartupLoggingUtils.shutdown();
   }
+
 }
diff --git a/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java 
b/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
index 3f4e62a..c696719 100644
--- a/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
+++ b/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
@@ -70,7 +70,6 @@ import java.util.stream.Collectors;
 
 import com.carrotsearch.randomizedtesting.RandomizedContext;
 import com.carrotsearch.randomizedtesting.RandomizedTest;
-import com.carrotsearch.randomizedtesting.TraceFormatting;
 import com.carrotsearch.randomizedtesting.rules.SystemPropertiesRestoreRule;
 
 import io.opentracing.noop.NoopTracerFactory;
@@ -184,14 +183,6 @@ import static 
org.hamcrest.core.StringContains.containsString;
 public abstract class SolrTestCaseJ4 extends SolrTestCase {
 
   private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
-  private static final List<String> DEFAULT_STACK_FILTERS = Arrays.asList(new 
String [] {
-      "org.junit.",
-      "junit.framework.",
-      "sun.",
-      "java.lang.reflect.",
-      "com.carrotsearch.randomizedtesting.",
-  });
   
   public static final String DEFAULT_TEST_COLLECTION_NAME = "collection1";
   public static final String DEFAULT_TEST_CORENAME = 
DEFAULT_TEST_COLLECTION_NAME;
@@ -373,13 +364,6 @@ public abstract class SolrTestCaseJ4 extends SolrTestCase {
 
       resetExceptionIgnores();
 
-      if (suiteFailureMarker.wasSuccessful()) {
-        // if the tests passed, make sure everything was closed / released
-        String orr = clearObjectTrackerAndCheckEmpty(60, false);
-        assertNull(orr, orr);
-      } else {
-        ObjectReleaseTracker.tryClose();
-      }
       resetFactory();
       coreName = DEFAULT_TEST_CORENAME;
     } finally {
@@ -442,49 +426,6 @@ public abstract class SolrTestCaseJ4 extends SolrTestCase {
       fail("ByteBuddy and Mockito are not available on classpath: " + 
e.toString());
     }
   }
-  
-  /**
-   * @return null if ok else error message
-   */
-  public static String clearObjectTrackerAndCheckEmpty(int waitSeconds) {
-    return clearObjectTrackerAndCheckEmpty(waitSeconds, false);
-  }
-  
-  /**
-   * @return null if ok else error message
-   */
-  public static String clearObjectTrackerAndCheckEmpty(int waitSeconds, 
boolean tryClose) {
-    int retries = 0;
-    String result;
-    do {
-      result = ObjectReleaseTracker.checkEmpty();
-      if (result == null)
-        break;
-      try {
-        if (retries % 10 == 0) {
-          log.info("Waiting for all tracked resources to be released");
-          if (retries > 10) {
-            TraceFormatting tf = new TraceFormatting(DEFAULT_STACK_FILTERS);
-            Map<Thread,StackTraceElement[]> stacksMap = 
Thread.getAllStackTraces();
-            Set<Entry<Thread,StackTraceElement[]>> entries = 
stacksMap.entrySet();
-            for (Entry<Thread,StackTraceElement[]> entry : entries) {
-              String stack = tf.formatStackTrace(entry.getValue());
-              System.err.println(entry.getKey().getName() + ":\n" + stack);
-            }
-          }
-        }
-        TimeUnit.SECONDS.sleep(1);
-      } catch (InterruptedException e) { break; }
-    }
-    while (retries++ < waitSeconds);
-    
-    
-    log.info("------------------------------------------------------- Done 
waiting for tracked resources to be released");
-    
-    ObjectReleaseTracker.clear();
-    
-    return result;
-  }
 
   @SuppressForbidden(reason = "Using the Level class from log4j2 directly")
   private static Map<String, Level> savedClassLogLevels = new HashMap<>();

Reply via email to