You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by kr...@apache.org on 2022/05/10 02:04:14 UTC

[solr] 01/02: SOLR-16186: AuditLoggerPluginTest leaks threads

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

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

commit 215633699fcb84329440d41749772c1ef89cbb30
Author: Kevin Risden <ri...@users.noreply.github.com>
AuthorDate: Mon May 9 21:59:52 2022 -0400

    SOLR-16186: AuditLoggerPluginTest leaks threads
---
 .../java/org/apache/solr/security/AuditLoggerPlugin.java   | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/security/AuditLoggerPlugin.java b/solr/core/src/java/org/apache/solr/security/AuditLoggerPlugin.java
index 07a8dd73740..62d6d952220 100644
--- a/solr/core/src/java/org/apache/solr/security/AuditLoggerPlugin.java
+++ b/solr/core/src/java/org/apache/solr/security/AuditLoggerPlugin.java
@@ -42,9 +42,11 @@ import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.util.ExecutorUtil;
 import org.apache.solr.common.util.SolrNamedThreadFactory;
+import org.apache.solr.common.util.TimeSource;
 import org.apache.solr.core.SolrInfoBean;
 import org.apache.solr.metrics.SolrMetricsContext;
 import org.apache.solr.security.AuditEvent.EventType;
+import org.apache.solr.util.TimeOut;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -348,7 +350,8 @@ public abstract class AuditLoggerPlugin implements Closeable, Runnable, SolrInfo
       waitForQueueToDrain(30);
       closed = true;
       log.info("Shutting down async Auditlogger background thread(s)");
-      executorService.shutdownNow();
+      ExecutorUtil.shutdownNowAndAwaitTermination(executorService);
+      executorService = null;
       try {
         SolrInfoBean.super.close();
       } catch (Exception e) {
@@ -364,8 +367,8 @@ public abstract class AuditLoggerPlugin implements Closeable, Runnable, SolrInfo
    */
   protected void waitForQueueToDrain(int timeoutSeconds) {
     if (async && executorService != null) {
-      int timeSlept = 0;
-      while ((!queue.isEmpty() || auditsInFlight.get() > 0) && timeSlept < timeoutSeconds) {
+      TimeOut timeOut = new TimeOut(timeoutSeconds, TimeUnit.SECONDS, TimeSource.NANO_TIME);
+      while ((!queue.isEmpty() || auditsInFlight.get() > 0) && !timeOut.hasTimedOut()) {
         try {
           if (log.isInfoEnabled()) {
             log.info(
@@ -373,9 +376,10 @@ public abstract class AuditLoggerPlugin implements Closeable, Runnable, SolrInfo
                 queue.size(),
                 auditsInFlight.get());
           }
-          Thread.sleep(1000);
-          timeSlept++;
+          timeOut.sleep(1000);
         } catch (InterruptedException ignored) {
+          // Preserve interrupt status
+          Thread.currentThread().interrupt();
         }
       }
     }