Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CompositeThrowable output should include cause of exceptions #6681

Closed
scabug opened this issue Nov 18, 2012 · 3 comments
Closed

CompositeThrowable output should include cause of exceptions #6681

scabug opened this issue Nov 18, 2012 · 3 comments
Milestone

Comments

@scabug
Copy link

scabug commented Nov 18, 2012

When an exception with a cause is thrown, Scala/Java will display the chain of causes.

But when it is thrown inside a parallel collection, the output in "Multiple exceptions thrown during a parallel computation" does not include any of the causes.

Example in Scala 2.10.0-RC2 below.

Regular:

scala> throw new RuntimeException("Hello", new RuntimeException("World", new RuntimeException("X")))
java.lang.RuntimeException: Hello
	at .<init>(<console>:8)
	at .<clinit>(<console>)
	at .<init>(<console>:7)
	at .<clinit>(<console>)
	at $print(<console>)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:731)
	at scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:980)
	at scala.tools.nsc.interpreter.IMain.loadAndRunReq$1(IMain.scala:570)
	at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:601)
	at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:565)
	at scala.tools.nsc.interpreter.ILoop.reallyInterpret$1(ILoop.scala:745)
	at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:790)
	at scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:702)
	at scala.tools.nsc.interpreter.ILoop.processLine$1(ILoop.scala:566)
	at scala.tools.nsc.interpreter.ILoop.innerLoop$1(ILoop.scala:573)
	at scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala:576)
	at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply$mcZ$sp(ILoop.scala:867)
	at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:822)
	at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:822)
	at scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:135)
	at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:822)
	at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:83)
	at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:96)
	at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:105)
	at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
Caused by: java.lang.RuntimeException: World
	... 29 more
Caused by: java.lang.RuntimeException: X
	... 29 more

Parallel


scala> Seq(1,2).par.foreach(i => throw new RuntimeException("Hello", new RuntimeException("World", new RuntimeException("X"))))
scala.collection.parallel.CompositeThrowable: Multiple exceptions thrown during a parallel computation: java.lang.RuntimeException: Hello
$anonfun$1.apply(<console>:8)
$anonfun$1.apply(<console>:8)
scala.collection.Iterator$class.foreach(Iterator.scala:727)
scala.collection.AbstractIterator.foreach(Iterator.scala:1156)
scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:976)
scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply$mcV$sp(Tasks.scala:54)
scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply(Tasks.scala:53)
scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply(Tasks.scala:53)
scala.collection.parallel.Task$class.tryLeaf(Tasks.scala:56)
scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:973)
.
.
.
	at scala.collection.parallel.package$$anon$1.alongWith(package.scala:91)
	at scala.collection.parallel.Task$class.mergeThrowables(Tasks.scala:86)
	at scala.collection.parallel.ParIterableLike$Foreach.mergeThrowables(ParIterableLike.scala:973)
	at scala.collection.parallel.Task$class.tryMerge(Tasks.scala:72)
	at scala.collection.parallel.ParIterableLike$Foreach.tryMerge(ParIterableLike.scala:973)
	at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask$class.internal(Tasks.scala:190)
	at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.internal(Tasks.scala:514)
	at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask$class.compute(Tasks.scala:162)
	at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.compute(Tasks.scala:514)
	at scala.concurrent.forkjoin.RecursiveAction.exec(RecursiveAction.java:160)
	at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:262)
	at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:975)
	at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1478)
	at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)
@scabug
Copy link
Author

scabug commented Nov 18, 2012

Imported From: https://issues.scala-lang.org/browse/SI-6681?orig=1
Reporter: Mike Mintz (mikemintz)
Affected Versions: 2.9.1, 2.10.0-RC2
Duplicates #7474

@scabug
Copy link
Author

scabug commented Dec 21, 2016

Mike Mintz (mikemintz) said:
This appears to be working in Scala 2.12.1, so I'm marking it fixed.

$ scala -Yrepl-class-based
cat: /usr/lib/jvm/java-8-openjdk/release: No such file or directory
Welcome to Scala 2.12.1-20161205-201300-2787b47 (OpenJDK 64-Bit Server VM, Java 1.8.0_112).
Type in expressions for evaluation. Or try :help.

scala> Seq(1,2).par.foreach(i => throw new RuntimeException("Hello", new RuntimeException("World", new RuntimeException("X"))))
java.lang.RuntimeException: Hello
  at $anonfun$res0$1(<console>:12)
  at $anonfun$res0$1$adapted(<console>:12)
  at scala.collection.Iterator.foreach(Iterator.scala:929)
  at scala.collection.Iterator.foreach$(Iterator.scala:929)
  at scala.collection.AbstractIterator.foreach(Iterator.scala:1406)
  at scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:970)
  at scala.collection.parallel.Task.$anonfun$tryLeaf$1(Tasks.scala:49)
  at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
  at scala.util.control.Breaks$$anon$1.catchBreak(Breaks.scala:63)
  at scala.collection.parallel.Task.tryLeaf(Tasks.scala:52)
  at scala.collection.parallel.Task.tryLeaf$(Tasks.scala:46)
  at scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:967)
  at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.internal(Tasks.scala:156)
  at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.internal$(Tasks.scala:153)
  at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.internal(Tasks.scala:440)
  at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute(Tasks.scala:146)
  at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute$(Tasks.scala:145)
  at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.compute(Tasks.scala:440)
  at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189)
  at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
  at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
  at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
  at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: java.lang.RuntimeException: World
  ... 23 more
Caused by: java.lang.RuntimeException: X
  ... 23 more
  Suppressed: java.lang.RuntimeException: Hello
    at $anonfun$res0$1(<console>:12)
    at $anonfun$res0$1$adapted(<console>:12)
    at scala.collection.Iterator.foreach(Iterator.scala:929)
    at scala.collection.Iterator.foreach$(Iterator.scala:929)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1406)
    at scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:970)
    at scala.collection.parallel.Task.$anonfun$tryLeaf$1(Tasks.scala:49)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    at scala.util.control.Breaks$$anon$1.catchBreak(Breaks.scala:63)
    at scala.collection.parallel.Task.tryLeaf(Tasks.scala:52)
    at scala.collection.parallel.Task.tryLeaf$(Tasks.scala:46)
    at scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:967)
    at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute(Tasks.scala:149)
    ... 7 more
  Caused by: java.lang.RuntimeException: World
    ... 20 more
  Caused by: java.lang.RuntimeException: X
    ... 20 more

@scabug scabug closed this as completed Dec 21, 2016
@scabug
Copy link
Author

scabug commented Dec 22, 2016

@som-snytt said:
scala/scala@d40f1b8

$ scala
Welcome to Scala 2.12.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_111).
Type in expressions for evaluation. Or try :help.

scala> throw new RuntimeException("Hello", new RuntimeException("World", new RuntimeException("X")))
java.lang.RuntimeException: Hello
  ... 29 elided
Caused by: java.lang.RuntimeException: World
  ... 29 more
Caused by: java.lang.RuntimeException: X
  ... 29 more

scala> throw { val x = new RuntimeException("Hello", new RuntimeException("World", new RuntimeException("X"))) ; x.addSuppressed(new NullPointerException) ; x } 
java.lang.RuntimeException: Hello
  ... 32 elided
Caused by: java.lang.RuntimeException: World
  ... 32 more
Caused by: java.lang.RuntimeException: X
  ... 32 more
  Suppressed: java.lang.NullPointerException
    ... 32 more

$ scala211
Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_111).
Type in expressions for evaluation. Or try :help.

scala> Seq(1,2).par.foreach(i => if (i == 2) ??? else throw new RuntimeException("Hello", new RuntimeException("World", new RuntimeException("X"))))
java.lang.RuntimeException: Hello
  at $anonfun$1.apply(<console>:12)
  at $anonfun$1.apply(<console>:12)
  at scala.collection.Iterator$class.foreach(Iterator.scala:893)
  at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
  at scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:972)
  at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply$mcV$sp(Tasks.scala:49)
  at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply(Tasks.scala:48)
  at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply(Tasks.scala:48)
  at scala.collection.parallel.Task$class.tryLeaf(Tasks.scala:51)
  at scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:969)
  at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask$class.internal(Tasks.scala:159)
  at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.internal(Tasks.scala:443)
  at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask$class.compute(Tasks.scala:149)
  at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.compute(Tasks.scala:443)
  at scala.concurrent.forkjoin.RecursiveAction.exec(RecursiveAction.java:160)
  at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
  at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
  at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
  at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.lang.RuntimeException: World
  ... 19 more
Caused by: java.lang.RuntimeException: X
  ... 19 more

$ scala -Yrepl-class-based
Welcome to Scala 2.12.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_111).
Type in expressions for evaluation. Or try :help.

scala> Seq(1,2).par.foreach(i => if (i == 2) ??? else throw new RuntimeException("Hello", new RuntimeException("World", new RuntimeException("X"))))
java.lang.RuntimeException: Hello
  at $anonfun$res0$1(<console>:12)
  at $anonfun$res0$1$adapted(<console>:12)
  at scala.collection.Iterator.foreach(Iterator.scala:929)
  at scala.collection.Iterator.foreach$(Iterator.scala:929)
  at scala.collection.AbstractIterator.foreach(Iterator.scala:1406)
  at scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:970)
  at scala.collection.parallel.Task.$anonfun$tryLeaf$1(Tasks.scala:49)
  at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
  at scala.util.control.Breaks$$anon$1.catchBreak(Breaks.scala:63)
  at scala.collection.parallel.Task.tryLeaf(Tasks.scala:52)
  at scala.collection.parallel.Task.tryLeaf$(Tasks.scala:46)
  at scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:967)
  at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.internal(Tasks.scala:156)
  at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.internal$(Tasks.scala:153)
  at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.internal(Tasks.scala:440)
  at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute(Tasks.scala:146)
  at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute$(Tasks.scala:145)
  at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.compute(Tasks.scala:440)
  at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189)
  at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
  at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
  at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
  at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: java.lang.RuntimeException: World
  ... 23 more
Caused by: java.lang.RuntimeException: X
  ... 23 more
  Suppressed: scala.NotImplementedError: an implementation is missing
    at scala.Predef$.$qmark$qmark$qmark(Predef.scala:284)
    at $anonfun$res0$1(<console>:12)
    at $anonfun$res0$1$adapted(<console>:12)
    at scala.collection.Iterator.foreach(Iterator.scala:929)
    at scala.collection.Iterator.foreach$(Iterator.scala:929)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1406)
    at scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:970)
    at scala.collection.parallel.Task.$anonfun$tryLeaf$1(Tasks.scala:49)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    at scala.util.control.Breaks$$anon$1.catchBreak(Breaks.scala:63)
    at scala.collection.parallel.Task.tryLeaf(Tasks.scala:52)
    at scala.collection.parallel.Task.tryLeaf$(Tasks.scala:46)
    at scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:967)
    at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute(Tasks.scala:149)
    ... 7 more


@scabug scabug added this to the 2.12.1 milestone Apr 7, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant