You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ro...@apache.org on 2016/09/22 13:07:30 UTC

[1/2] lucene-solr:branch_6x: SOLR-9544: Give ObjectReleaseTracker more time for async closing objects

Repository: lucene-solr
Updated Branches:
  refs/heads/branch_6x 7498ca9ad -> 36b39a2c4
  refs/heads/master a41dd86e3 -> c55a14e19


SOLR-9544: Give ObjectReleaseTracker more time for async closing objects


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/36b39a2c
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/36b39a2c
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/36b39a2c

Branch: refs/heads/branch_6x
Commit: 36b39a2c415d812d143ebcbc88d90ecd15754cbb
Parents: 7498ca9
Author: Alan Woodward <ro...@apache.org>
Authored: Wed Sep 21 18:46:52 2016 +0100
Committer: Alan Woodward <ro...@apache.org>
Committed: Thu Sep 22 14:01:12 2016 +0100

----------------------------------------------------------------------
 solr/CHANGES.txt                                |  3 +++
 .../solr/util/TestObjectReleaseTracker.java     | 12 +++++------
 .../solr/common/util/ObjectReleaseTracker.java  | 21 ++++++++++++++------
 .../java/org/apache/solr/SolrTestCaseJ4.java    |  2 +-
 4 files changed, 25 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/36b39a2c/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 2aeb2b0..ba660b0 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -134,6 +134,9 @@ Other Changes
 * SOLR-5563: Move lots of SolrCloud logging from 'info' to 'debug' (janhoy, Alan
   Woodward)
 
+* SOLR-9544: Allow ObjectReleaseTracker more time to check for asynchronously
+  closing resources (Alan Woodward)
+
 ==================  6.2.1 ==================
 
 Bug Fixes

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/36b39a2c/solr/core/src/test/org/apache/solr/util/TestObjectReleaseTracker.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/util/TestObjectReleaseTracker.java b/solr/core/src/test/org/apache/solr/util/TestObjectReleaseTracker.java
index da50fd8..f7e6943 100644
--- a/solr/core/src/test/org/apache/solr/util/TestObjectReleaseTracker.java
+++ b/solr/core/src/test/org/apache/solr/util/TestObjectReleaseTracker.java
@@ -29,12 +29,12 @@ public class TestObjectReleaseTracker extends LuceneTestCase {
   public void testObjectReleaseTracker() {
     ObjectReleaseTracker.track(new Object());
     ObjectReleaseTracker.release(new Object());
-    assertNotNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
-    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
+    assertNotNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty(1));
+    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty(1));
     Object obj = new Object();
     ObjectReleaseTracker.track(obj);
     ObjectReleaseTracker.release(obj);
-    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
+    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty(1));
     
     Object obj1 = new Object();
     ObjectReleaseTracker.track(obj1);
@@ -46,7 +46,7 @@ public class TestObjectReleaseTracker extends LuceneTestCase {
     ObjectReleaseTracker.release(obj1);
     ObjectReleaseTracker.release(obj2);
     ObjectReleaseTracker.release(obj3);
-    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
+    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty(1));
     
     ObjectReleaseTracker.track(obj1);
     ObjectReleaseTracker.track(obj2);
@@ -55,7 +55,7 @@ public class TestObjectReleaseTracker extends LuceneTestCase {
     ObjectReleaseTracker.release(obj1);
     ObjectReleaseTracker.release(obj2);
     // ObjectReleaseTracker.release(obj3);
-    assertNotNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
-    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
+    assertNotNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty(1));
+    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty(1));
   }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/36b39a2c/solr/solrj/src/java/org/apache/solr/common/util/ObjectReleaseTracker.java
----------------------------------------------------------------------
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 3fc0546..2d7c1a6 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
@@ -28,6 +28,7 @@ import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutorService;
+import java.util.concurrent.TimeUnit;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -56,8 +57,18 @@ public class ObjectReleaseTracker {
   /**
    * @return null if ok else error message
    */
-  public static String clearObjectTrackerAndCheckEmpty() {
-    String result = checkEmpty();
+  public static String clearObjectTrackerAndCheckEmpty(int waitSeconds) {
+    int retries = 0;
+    String result;
+    do {
+      result = checkEmpty();
+      if (result == null)
+        break;
+      try {
+        TimeUnit.SECONDS.sleep(1);
+      } catch (InterruptedException e) { break; }
+    }
+    while (retries++ < waitSeconds);
     
     OBJECTS.clear();
     
@@ -77,11 +88,9 @@ public class ObjectReleaseTracker {
         objects.add(entry.getKey().getClass().getSimpleName());
       }
       
-      error = "ObjectTracker found " + entries.size() + " object(s) that were not released!!! " + objects;
-      
-      System.err.println(error);
+      error = "ObjectTracker found " + entries.size() + " object(s) that were not released!!! " + objects + "\n";
       for (Entry<Object,String> entry : entries) {
-        System.err.println(entry.getValue());
+        error += entry.getValue() + "\n";
       }
     }
     

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/36b39a2c/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
----------------------------------------------------------------------
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 c15da95..c990048 100644
--- a/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
+++ b/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
@@ -253,7 +253,7 @@ public abstract class SolrTestCaseJ4 extends LuceneTestCase {
         // if the tests passed, make sure everything was closed / released
         if (!RandomizedContext.current().getTargetClass().isAnnotationPresent(SuppressObjectReleaseTracker.class)) {
           endTrackingSearchers(120, false);
-          String orr = ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty();
+          String orr = ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty(30);
           assertNull(orr, orr);
         } else {
           endTrackingSearchers(15, false);


[2/2] lucene-solr:master: SOLR-9544: Give ObjectReleaseTracker more time for async closing objects

Posted by ro...@apache.org.
SOLR-9544: Give ObjectReleaseTracker more time for async closing objects


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/c55a14e1
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/c55a14e1
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/c55a14e1

Branch: refs/heads/master
Commit: c55a14e198072c16a834d5b3683c5edaa0c67e5d
Parents: a41dd86
Author: Alan Woodward <ro...@apache.org>
Authored: Wed Sep 21 18:46:52 2016 +0100
Committer: Alan Woodward <ro...@apache.org>
Committed: Thu Sep 22 14:02:06 2016 +0100

----------------------------------------------------------------------
 solr/CHANGES.txt                                |  3 +++
 .../solr/util/TestObjectReleaseTracker.java     | 12 +++++------
 .../solr/common/util/ObjectReleaseTracker.java  | 21 ++++++++++++++------
 .../java/org/apache/solr/SolrTestCaseJ4.java    |  2 +-
 4 files changed, 25 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c55a14e1/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 99bfabc..97eb8bd 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -164,6 +164,9 @@ Other Changes
 * SOLR-5563: Move lots of SolrCloud logging from 'info' to 'debug' (janhoy, Alan
   Woodward)
 
+* SOLR-9544: Allow ObjectReleaseTracker more time to check for asynchronously
+  closing resources (Alan Woodward)
+
 ==================  6.2.1 ==================
 
 Bug Fixes

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c55a14e1/solr/core/src/test/org/apache/solr/util/TestObjectReleaseTracker.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/util/TestObjectReleaseTracker.java b/solr/core/src/test/org/apache/solr/util/TestObjectReleaseTracker.java
index da50fd8..f7e6943 100644
--- a/solr/core/src/test/org/apache/solr/util/TestObjectReleaseTracker.java
+++ b/solr/core/src/test/org/apache/solr/util/TestObjectReleaseTracker.java
@@ -29,12 +29,12 @@ public class TestObjectReleaseTracker extends LuceneTestCase {
   public void testObjectReleaseTracker() {
     ObjectReleaseTracker.track(new Object());
     ObjectReleaseTracker.release(new Object());
-    assertNotNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
-    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
+    assertNotNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty(1));
+    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty(1));
     Object obj = new Object();
     ObjectReleaseTracker.track(obj);
     ObjectReleaseTracker.release(obj);
-    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
+    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty(1));
     
     Object obj1 = new Object();
     ObjectReleaseTracker.track(obj1);
@@ -46,7 +46,7 @@ public class TestObjectReleaseTracker extends LuceneTestCase {
     ObjectReleaseTracker.release(obj1);
     ObjectReleaseTracker.release(obj2);
     ObjectReleaseTracker.release(obj3);
-    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
+    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty(1));
     
     ObjectReleaseTracker.track(obj1);
     ObjectReleaseTracker.track(obj2);
@@ -55,7 +55,7 @@ public class TestObjectReleaseTracker extends LuceneTestCase {
     ObjectReleaseTracker.release(obj1);
     ObjectReleaseTracker.release(obj2);
     // ObjectReleaseTracker.release(obj3);
-    assertNotNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
-    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty());
+    assertNotNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty(1));
+    assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty(1));
   }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c55a14e1/solr/solrj/src/java/org/apache/solr/common/util/ObjectReleaseTracker.java
----------------------------------------------------------------------
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 3fc0546..2d7c1a6 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
@@ -28,6 +28,7 @@ import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutorService;
+import java.util.concurrent.TimeUnit;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -56,8 +57,18 @@ public class ObjectReleaseTracker {
   /**
    * @return null if ok else error message
    */
-  public static String clearObjectTrackerAndCheckEmpty() {
-    String result = checkEmpty();
+  public static String clearObjectTrackerAndCheckEmpty(int waitSeconds) {
+    int retries = 0;
+    String result;
+    do {
+      result = checkEmpty();
+      if (result == null)
+        break;
+      try {
+        TimeUnit.SECONDS.sleep(1);
+      } catch (InterruptedException e) { break; }
+    }
+    while (retries++ < waitSeconds);
     
     OBJECTS.clear();
     
@@ -77,11 +88,9 @@ public class ObjectReleaseTracker {
         objects.add(entry.getKey().getClass().getSimpleName());
       }
       
-      error = "ObjectTracker found " + entries.size() + " object(s) that were not released!!! " + objects;
-      
-      System.err.println(error);
+      error = "ObjectTracker found " + entries.size() + " object(s) that were not released!!! " + objects + "\n";
       for (Entry<Object,String> entry : entries) {
-        System.err.println(entry.getValue());
+        error += entry.getValue() + "\n";
       }
     }
     

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c55a14e1/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
----------------------------------------------------------------------
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 ea70805..fca0223 100644
--- a/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
+++ b/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
@@ -253,7 +253,7 @@ public abstract class SolrTestCaseJ4 extends LuceneTestCase {
         // if the tests passed, make sure everything was closed / released
         if (!RandomizedContext.current().getTargetClass().isAnnotationPresent(SuppressObjectReleaseTracker.class)) {
           endTrackingSearchers(120, false);
-          String orr = ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty();
+          String orr = ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty(30);
           assertNull(orr, orr);
         } else {
           endTrackingSearchers(15, false);