This is an automated email from the ASF dual-hosted git repository. krisden pushed a commit to branch branch_9_0 in repository https://gitbox.apache.org/repos/asf/solr.git
commit 05d1eb52c689b9207e3a8642f56f67208b8cc10a Author: Kevin Risden <[email protected]> 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(); } } }
