enso
enso copied to clipboard
Occasional StackOverflow when running Microsoft_Tests on CI
Occasionally we are getting failures when running Microsoft_Tests:
The message is rather brief and we are missing a stacktrace:
Execution finished with an error: Resource exhausted: Stack overflow.
@JaroslavTulach suggested an improved error message with the following diff:
diff --git engine/runner/src/main/java/org/enso/runner/Main.java engine/runner/src/main/java/org/enso/runner/Main.java
index 7c63a8e7f5..72f17d6f97 100644
--- engine/runner/src/main/java/org/enso/runner/Main.java
+++ engine/runner/src/main/java/org/enso/runner/Main.java
@@ -1280,6 +1280,20 @@ public class Main {
Function<StackFrame, String> fnRootName = StackFrame::getRootName;
Function<StackFrame, SourceSection> fnSourceSection = StackFrame::getSourceLocation;
+ if (exception.isResourceExhausted()) {
+ try {
+ var implField = exception.getClass().getDeclaredField("impl");
+ implField.setAccessible(true);
+ var impl = implField.get(exception);
+
+ var exceptionField = impl.getClass().getDeclaredField("exception");
+ exceptionField.setAccessible(true);
+ var ex = (Throwable)exceptionField.get(impl);
+ ex.printStackTrace();
+ } catch (ReflectiveOperationException ex) {
+ }
+ }
+
Utils.printStackTrace(
exception.getPolyglotStackTrace(),
exception.isSyntaxError(),
/cc @AdRiley
I am consistently getting a stack overflow locally trying to run the table tests.
Adding the above code to improve the error message gives me this:
[ERROR] [2024-10-03T14:07:15.371] [org.enso.runner.Main] Error during execution
java.io.IOException: java.lang.reflect.InaccessibleObjectException: Unable to make field final java.lang.Object org.graalvm.polyglot.PolyglotException.impl accessible: module org.graalvm.polyglot does not "opens org.graalvm.polyglot" to module org.enso.runner
at org.enso.runner/org.enso.runner.Main.withProfiling(Main.java:1257)
at org.enso.runner/org.enso.runner.Main.launch(Main.java:1515)
at org.enso.runner/org.enso.runner.Main.launch(Main.java:1467)
at org.enso.runner/org.enso.runner.Main.main(Main.java:1064)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field final java.lang.Object org.graalvm.polyglot.PolyglotException.impl accessible: module org.graalvm.polyglot does not "opens org.graalvm.polyglot" to module org.enso.runner at java.base/java.lang.reflect.AccessibleObject.throwInaccessibleObjectException(AccessibleObject.java:391)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:367)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:315)
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:183)
at java.base/java.lang.reflect.Field.setAccessible(Field.java:177)
at org.enso.runner/org.enso.runner.Main.printPolyglotException(Main.java:1322)
at org.enso.runner/org.enso.runner.Main.runMain(Main.java:939)
at org.enso.runner/org.enso.runner.Main.runPackage(Main.java:873)
at org.enso.runner/org.enso.runner.Main.handleRun(Main.java:773)
at org.enso.runner/org.enso.runner.Main.mainEntry(Main.java:1158)
at org.enso.runner/org.enso.runner.Main.lambda$launch$22(Main.java:1519)
at org.enso.runner/org.enso.runner.Main.withProfiling(Main.java:1253)
... 3 common frames omitted
Command failed with an error: java.io.IOException: java.lang.reflect.InaccessibleObjectException: Unable to make field final java.lang.Object org.graalvm.polyglot.PolyglotException.impl accessible: module org.graalvm.polyglot does not "opens org.graalvm.polyglot" to module org.enso.runner
Fixed by increasing stack size.