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

mattsicker pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 9c44138bfffa94a8407d853cdfdf95b21143a4cb
Author: Matt Sicker <[email protected]>
AuthorDate: Sun Mar 27 21:43:12 2022 -0500

    Use exponential backoff for file cleaner
    
    Signed-off-by: Matt Sicker <[email protected]>
---
 .../logging/log4j/test/junit/AbstractFileCleaner.java   | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git 
a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/AbstractFileCleaner.java
 
b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/AbstractFileCleaner.java
index 2369ed0..15e8bdd 100644
--- 
a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/AbstractFileCleaner.java
+++ 
b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/AbstractFileCleaner.java
@@ -17,6 +17,10 @@
 
 package org.apache.logging.log4j.test.junit;
 
+import org.junit.jupiter.api.extension.AfterEachCallback;
+import org.junit.jupiter.api.extension.BeforeEachCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
+
 import java.io.IOException;
 import java.io.InterruptedIOException;
 import java.nio.file.Files;
@@ -25,12 +29,9 @@ import java.util.Collection;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.LockSupport;
 import java.util.stream.Collectors;
 
-import org.junit.jupiter.api.extension.AfterEachCallback;
-import org.junit.jupiter.api.extension.BeforeEachCallback;
-import org.junit.jupiter.api.extension.ExtensionContext;
-
 import static org.junit.jupiter.api.Assertions.fail;
 
 abstract class AbstractFileCleaner implements BeforeEachCallback, 
AfterEachCallback {
@@ -38,6 +39,7 @@ abstract class AbstractFileCleaner implements 
BeforeEachCallback, AfterEachCallb
     private static final int MAX_TRIES = 
Integer.getInteger("log4j2.junit.fileCleanerMaxTries", 10);
 
     private static final int SLEEP_PERIOD_MILLIS = 
Integer.getInteger("log4j2.junit.fileCleanerSleepPeriodMillis", 200);
+    private static final int SLEEP_BASE_PERIOD_MILLIS = SLEEP_PERIOD_MILLIS / 
MAX_TRIES;
 
     @Override
     public void beforeEach(final ExtensionContext context) throws Exception {
@@ -57,7 +59,7 @@ abstract class AbstractFileCleaner implements 
BeforeEachCallback, AfterEachCallb
         final Map<Path, IOException> failures = new ConcurrentHashMap<>();
         for (final Path path : paths) {
             if (Files.exists(path)) {
-                for (int i = 0; i < MAX_TRIES; i++) {
+                for (int i = 0, sleepMillis = SLEEP_BASE_PERIOD_MILLIS; i < 
MAX_TRIES; i++, sleepMillis <<= 1) {
                     try {
                         if (delete(path)) {
                             failures.remove(path);
@@ -66,9 +68,8 @@ abstract class AbstractFileCleaner implements 
BeforeEachCallback, AfterEachCallb
                     } catch (final IOException e) {
                         failures.put(path, e);
                     }
-                    try {
-                        TimeUnit.MILLISECONDS.sleep(SLEEP_PERIOD_MILLIS);
-                    } catch (final InterruptedException ignored) {
+                    LockSupport.parkNanos(path, 
TimeUnit.MILLISECONDS.toNanos(sleepMillis));
+                    if (Thread.interrupted()) {
                         failures.put(path, new InterruptedIOException());
                         Thread.currentThread().interrupt();
                         break;

Reply via email to