You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemds.apache.org by ba...@apache.org on 2023/08/09 11:05:25 UTC
[systemds] branch main updated: [MINOR] Timeout test (#1878)
This is an automated email from the ASF dual-hosted git repository.
baunsgaard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/systemds.git
The following commit(s) were added to refs/heads/main by this push:
new d28921a0bd [MINOR] Timeout test (#1878)
d28921a0bd is described below
commit d28921a0bdecaa1af411e1b2efa13e94dc47b9ec
Author: Sebastian Baunsgaard <ba...@tu-berlin.de>
AuthorDate: Wed Aug 9 13:05:18 2023 +0200
[MINOR] Timeout test (#1878)
This commit adds a timeout on all tests of 1000 seconds.
this means in practice that the github actions does not stall for 1.5
hours, if something is wrong.
---
.../org/apache/sysds/test/AutomatedTestBase.java | 48 ++++++++++++++++------
.../federated/multitenant/MultiTenantTestBase.java | 2 +-
2 files changed, 36 insertions(+), 14 deletions(-)
diff --git a/src/test/java/org/apache/sysds/test/AutomatedTestBase.java b/src/test/java/org/apache/sysds/test/AutomatedTestBase.java
index 08d7478f07..aee80e5f1c 100644
--- a/src/test/java/org/apache/sysds/test/AutomatedTestBase.java
+++ b/src/test/java/org/apache/sysds/test/AutomatedTestBase.java
@@ -38,6 +38,10 @@ import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
@@ -1435,7 +1439,25 @@ public abstract class AutomatedTestBase {
*/
protected ByteArrayOutputStream runTest(boolean newWay, boolean exceptionExpected, Class<?> expectedException,
String errMessage, int maxSparkInst) {
-
+ ExecutorService executor = Executors.newSingleThreadExecutor();
+ try{
+ return executor.submit(() ->
+ runTestWithTimeout(newWay,exceptionExpected,expectedException,errMessage, maxSparkInst))//
+ .get(1000, TimeUnit.SECONDS);
+ }
+ catch(TimeoutException e){
+ throw new RuntimeException("Our tests should run faster than 1000 sec each",e);
+ }
+ catch(Exception e){
+ throw new RuntimeException(e);
+ }
+ finally{
+ executor.shutdown();
+ }
+ }
+
+ private ByteArrayOutputStream runTestWithTimeout(boolean newWay, boolean exceptionExpected, Class<?> expectedException,
+ String errMessage, int maxSparkInst){
String name = "";
final StackTraceElement[] ste = Thread.currentThread().getStackTrace();
for(int i = 0; i < ste.length; i++) {
@@ -1443,23 +1465,23 @@ public abstract class AutomatedTestBase {
name = ste[i - 1].getClassName() + "." + ste[i - 1].getMethodName();
}
LOG.info("Test method name: " + name);
-
+
String executionFile = sourceDirectory + selectedTest + ".dml";
-
+
if(!newWay) {
executionFile = executionFile + "t";
ParameterBuilder.setVariablesInScript(sourceDirectory, selectedTest + ".dml", testVariables);
}
-
+
// cleanup scratch folder (prevent side effect between tests)
cleanupScratchSpace();
-
+
ArrayList<String> args = new ArrayList<>();
// setup arguments to SystemDS
if(DEBUG) {
args.add("-Dsystemds.logging=trace");
}
-
+
if(newWay) {
// Need a null pointer check because some tests read DML from a string.
if(null != fullDMLScriptName) {
@@ -1471,15 +1493,15 @@ public abstract class AutomatedTestBase {
args.add("-f");
args.add(executionFile);
}
-
+
addProgramIndependentArguments(args, programArgs);
-
+
// program-specific parameters
if(newWay) {
for(int i = 0; i < programArgs.length; i++)
args.add(programArgs[i]);
}
-
+
if(DEBUG) {
if(!newWay)
TestUtils.printDMLScript(executionFile);
@@ -1487,22 +1509,22 @@ public abstract class AutomatedTestBase {
TestUtils.printDMLScript(fullDMLScriptName);
}
}
-
+
ByteArrayOutputStream buff = outputBuffering ? new ByteArrayOutputStream() : null;
PrintStream old = System.out;
if(outputBuffering)
System.setOut(new PrintStream(buff));
-
+
try {
String[] dmlScriptArgs = args.toArray(new String[args.size()]);
if(LOG.isTraceEnabled())
LOG.trace("arguments to DMLScript: " + Arrays.toString(dmlScriptArgs));
main(dmlScriptArgs);
-
+
if(maxSparkInst > -1 && maxSparkInst < Statistics.getNoOfCompiledSPInst())
fail("Limit of Spark jobs is exceeded: expected: " + maxSparkInst + ", occurred: "
+ Statistics.getNoOfCompiledSPInst());
-
+
if(exceptionExpected)
fail("expected exception which has not been raised: " + expectedException);
}
diff --git a/src/test/java/org/apache/sysds/test/functions/federated/multitenant/MultiTenantTestBase.java b/src/test/java/org/apache/sysds/test/functions/federated/multitenant/MultiTenantTestBase.java
index 0b4e193ac4..685acf1ab9 100644
--- a/src/test/java/org/apache/sysds/test/functions/federated/multitenant/MultiTenantTestBase.java
+++ b/src/test/java/org/apache/sysds/test/functions/federated/multitenant/MultiTenantTestBase.java
@@ -138,7 +138,7 @@ public abstract class MultiTenantTestBase extends AutomatedTestBase {
}
protected String waitForCoordinators(int timeout){
- ExecutorService executor = Executors.newCachedThreadPool();
+ ExecutorService executor = Executors.newSingleThreadExecutor();
try{
return executor.submit(() -> waitForCoordinatorsActual()).get(timeout, TimeUnit.SECONDS);
}