You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2022/03/28 02:43:24 UTC
[logging-log4j2] 02/02: Use exponential backoff for file cleaner
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 <ma...@apache.org>
AuthorDate: Sun Mar 27 21:43:12 2022 -0500
Use exponential backoff for file cleaner
Signed-off-by: Matt Sicker <ma...@apache.org>
---
.../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;