From adf60bc843b9e92261b00de0ba18bb47875b5ab4 Mon Sep 17 00:00:00 2001 From: FlorianHuc Date: Fri, 11 Oct 2024 08:33:17 +0200 Subject: [PATCH] add persistence every 100 failures in case of OOM --- .../linea/ReferenceTestOutcomeRecorderTool.java | 17 +++++++++++++++-- .../linea/ReferenceTestOutcomeWriter.java | 14 +------------- .../consensys/linea/ReferenceTestWatcher.java | 9 ++++++++- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/reference-tests/src/main/java/net/consensys/linea/ReferenceTestOutcomeRecorderTool.java b/reference-tests/src/main/java/net/consensys/linea/ReferenceTestOutcomeRecorderTool.java index 97fffe8ac..575f804e6 100644 --- a/reference-tests/src/main/java/net/consensys/linea/ReferenceTestOutcomeRecorderTool.java +++ b/reference-tests/src/main/java/net/consensys/linea/ReferenceTestOutcomeRecorderTool.java @@ -17,6 +17,7 @@ import java.io.FileWriter; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; @@ -128,8 +129,20 @@ public static Map> extractConstraints(String message) { } @Synchronized - public static CompletableFuture writeToJsonFile() { - return writeToJsonFile(JSON_OUTPUT_FILENAME); + public static void writeToJsonFile(int count) { + try { + String directory = setFileDirectory(); + log.info("Reference test will be written to file {}\\{}", directory, JSON_OUTPUT_FILENAME); + writeToJsonFile(JSON_OUTPUT_FILENAME+"_"+count); + log.info("Reference test results written to file {}", JSON_OUTPUT_FILENAME); + log.info( + "Path exists: {}, file exist: {}", + Paths.get(directory).toFile().exists(), + Paths.get(directory).resolve(JSON_OUTPUT_FILENAME).toFile().exists()); + } catch (Exception e) { + log.error("Error while writing results"); + throw new RuntimeException("Error while writing results", e); + } } @Synchronized diff --git a/reference-tests/src/main/java/net/consensys/linea/ReferenceTestOutcomeWriter.java b/reference-tests/src/main/java/net/consensys/linea/ReferenceTestOutcomeWriter.java index c96b60d9b..c4e8da180 100644 --- a/reference-tests/src/main/java/net/consensys/linea/ReferenceTestOutcomeWriter.java +++ b/reference-tests/src/main/java/net/consensys/linea/ReferenceTestOutcomeWriter.java @@ -42,18 +42,6 @@ public class ReferenceTestOutcomeWriter implements LauncherSessionListener { @Override public void launcherSessionClosed(LauncherSession session) { - try { - String directory = setFileDirectory(); - log.info("Reference test will be written to file {}\\{}", directory, JSON_OUTPUT_FILENAME); - writeToJsonFile().get(); - log.info("Reference test results written to file {}", JSON_OUTPUT_FILENAME); - log.info( - "Path exists: {}, file exist: {}", - Paths.get(directory).toFile().exists(), - Paths.get(directory).resolve(JSON_OUTPUT_FILENAME).toFile().exists()); - } catch (Exception e) { - log.error("Error while writing results"); - throw new RuntimeException("Error while writing results", e); - } + writeToJsonFile(-1); } } diff --git a/reference-tests/src/test/java/net/consensys/linea/ReferenceTestWatcher.java b/reference-tests/src/test/java/net/consensys/linea/ReferenceTestWatcher.java index 60f2d2d79..4766b5504 100644 --- a/reference-tests/src/test/java/net/consensys/linea/ReferenceTestWatcher.java +++ b/reference-tests/src/test/java/net/consensys/linea/ReferenceTestWatcher.java @@ -14,6 +14,7 @@ */ package net.consensys.linea; +import static net.consensys.linea.ReferenceTestOutcomeRecorderTool.writeToJsonFile; import static net.consensys.linea.TestState.*; import static net.consensys.linea.testing.ExecutionEnvironment.CORSET_VALIDATION_RESULT; @@ -21,9 +22,9 @@ import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; import lombok.extern.slf4j.Slf4j; -import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.api.extension.TestWatcher; import org.opentest4j.AssertionFailedError; @@ -33,6 +34,7 @@ public class ReferenceTestWatcher implements TestWatcher { private static final String ASSERTION_FAILED = "ASSERTION_FAILED"; private static final String UNCATEGORIZED_EXCEPTION = "UNCATEGORIZED_EXCEPTION"; + private static volatile AtomicInteger counter = new AtomicInteger(0); @Override public void testFailed(ExtensionContext context, Throwable cause) { String testName = context.getDisplayName().split(": ")[1]; @@ -40,6 +42,11 @@ public void testFailed(ExtensionContext context, Throwable cause) { Map> logEventMessages = getLogEventMessages(cause); ReferenceTestOutcomeRecorderTool.mapAndStoreTestResult(testName, FAILED, logEventMessages); log.info("Failure added for {}", testName); + int count = counter.incrementAndGet(); + if(count%100 == 0){ + log.info("intermediary persistence after {} failures", count); + writeToJsonFile(count); + } } private static Map> getLogEventMessages(Throwable cause) {