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

SBT console disappears due to race condition #1706

Open
benmccann opened this issue Oct 31, 2014 · 14 comments
Open

SBT console disappears due to race condition #1706

benmccann opened this issue Oct 31, 2014 · 14 comments
Labels
Bug uncategorized Used for Waffle integration

Comments

@benmccann
Copy link
Contributor

I've created a repository that reproduces this bug.

The console prompt should reappear when the tests have finished running:

[success] Total time: 0 s, completed Oct 30, 2014 5:34:15 PM
>

However, due to this bug, often times you won't see the prompt appear after the tests have run:

[success] Total time: 0 s, completed Oct 30, 2014 5:41:37 PM

This is super annoying because it happens to me nearly every time I run my tests making me constantly kill and restart the SBT console. It happens much less with the sample repository than my real project (I'm guessing because there are fewer tests so I hit whatever race condition less often).

@eed3si9n
Copy link
Member

Thanks for the repro project, Ben. It's using 0.13.6, but do you know roughly when this started to happen? Has this always been the case with sbt?

@eed3si9n eed3si9n added the Bug label Oct 31, 2014
@benmccann
Copy link
Contributor Author

Hey @eed3si9n. Thanks for taking a look at this. It hasn't always been a problem for us. I'd say it's been happening the past few months. I'm not exactly sure when it started happening, but one theory I just came up with is that it started when we added some new test options that @jroper recommended to change the test output.

testOptions += Tests.Argument(TestFrameworks.JUnit, "-q", "-v")

That seems to fit the timeline and my project also seems to work when I remove that line

@som-snytt
Copy link
Contributor

I was able to repro on Ubuntu, Java 8. (Replacing annoying output with gist link.)

https://gist.github.com/som-snytt/02c55f12202f63e80eb5

So when it breaks, it's just the prompt echo that goes away. Not to minimize how annoying that must be.

@retronym
Copy link
Member

What does jstack reveal about the process after it gets stuck?

@benmccann
Copy link
Contributor Author

I actually have the whole process freeze up pretty frequently now, but I haven't figured out how to reproduce that yet. I'll let @som-snytt or someone else take the jstack question because I don't think I know that tool or SBT well enough to be very helpful.

@retronym
Copy link
Member

You can run jstack <process id> to capture a thread dump of any Java process. That tool comes with the JDK.

@retronym
Copy link
Member

The problem seems to be that junit-interface hijacks System.out but under some circumstances doesn't set it back. Looking at the design of EventDispatcher, it seems that parallel test execution and the "quiet mode" (-q) are fundamentally incompatible.

Stack trace of parallel tests, two of which are mutating System.out:

pool-6-thread-3@6390, prio=5, in group 'main', status: 'RUNNING'
      at java.lang.System.setOut0(System.java:-1)
      at java.lang.System.setOut(System.java:176)
      at com.novocode.junit.OutputCapture.stop(OutputCapture.java:30)
      at com.novocode.junit.EventDispatcher.uncapture(EventDispatcher.java:173)
      at com.novocode.junit.EventDispatcher.testFinished(EventDispatcher.java:85)
      at org.junit.runner.notification.RunNotifier$7.notifyListener(RunNotifier.java:191)
      at org.junit.runner.notification.RunNotifier$SafeNotifier.run(RunNotifier.java:61)
      at org.junit.runner.notification.RunNotifier.fireTestFinished(RunNotifier.java:188)
      at org.junit.internal.runners.model.EachTestNotifier.fireTestFinished(EachTestNotifier.java:39)
      at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:277)
      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
      at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
      at org.junit.runners.Suite.runChild(Suite.java:127)
      at org.junit.runners.Suite.runChild(Suite.java:26)
      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
      at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
      at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
      at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
      at com.novocode.junit.JUnitRunner$1.execute(JUnitRunner.java:132)
      at sbt.TestRunner.runTest$1(TestFramework.scala:76)
      at sbt.TestRunner.run(TestFramework.scala:85)
      at sbt.TestFramework$$anon$2$$anonfun$$init$$1$$anonfun$apply$8.apply(TestFramework.scala:197)
      at sbt.TestFramework$$anon$2$$anonfun$$init$$1$$anonfun$apply$8.apply(TestFramework.scala:197)
      at sbt.TestFramework$.sbt$TestFramework$$withContextLoader(TestFramework.scala:185)
      at sbt.TestFramework$$anon$2$$anonfun$$init$$1.apply(TestFramework.scala:197)
      at sbt.TestFramework$$anon$2$$anonfun$$init$$1.apply(TestFramework.scala:197)
      at sbt.TestFunction.apply(TestFramework.scala:202)
      at sbt.Tests$$anonfun$9.apply(Tests.scala:216)
      at sbt.Tests$$anonfun$9.apply(Tests.scala:216)
      at sbt.std.Transform$$anon$3$$anonfun$apply$2.apply(System.scala:44)
      at sbt.std.Transform$$anon$3$$anonfun$apply$2.apply(System.scala:44)
      at sbt.std.Transform$$anon$4.work(System.scala:63)
      at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
      at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
      at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
      at sbt.Execute.work(Execute.scala:235)
      at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
      at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
      at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
      at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      at java.lang.Thread.run(Thread.java:745)

pool-6-thread-2@6381, prio=5, in group 'main', status: 'RUNNING'
      at com.connectifier.data.mongodb.ModelSerializerTest.test1(ModelSerializerTest.java:11)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:483)
      at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
      at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
      at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
      at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
      at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
      at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
      at org.junit.runners.Suite.runChild(Suite.java:127)
      at org.junit.runners.Suite.runChild(Suite.java:26)
      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
      at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
      at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
      at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
      at com.novocode.junit.JUnitRunner$1.execute(JUnitRunner.java:132)
      at sbt.TestRunner.runTest$1(TestFramework.scala:76)
      at sbt.TestRunner.run(TestFramework.scala:85)
      at sbt.TestFramework$$anon$2$$anonfun$$init$$1$$anonfun$apply$8.apply(TestFramework.scala:197)
      at sbt.TestFramework$$anon$2$$anonfun$$init$$1$$anonfun$apply$8.apply(TestFramework.scala:197)
      at sbt.TestFramework$.sbt$TestFramework$$withContextLoader(TestFramework.scala:185)
      at sbt.TestFramework$$anon$2$$anonfun$$init$$1.apply(TestFramework.scala:197)
      at sbt.TestFramework$$anon$2$$anonfun$$init$$1.apply(TestFramework.scala:197)
      at sbt.TestFunction.apply(TestFramework.scala:202)
      at sbt.Tests$$anonfun$9.apply(Tests.scala:216)
      at sbt.Tests$$anonfun$9.apply(Tests.scala:216)
      at sbt.std.Transform$$anon$3$$anonfun$apply$2.apply(System.scala:44)
      at sbt.std.Transform$$anon$3$$anonfun$apply$2.apply(System.scala:44)
      at sbt.std.Transform$$anon$4.work(System.scala:63)
      at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
      at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
      at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
      at sbt.Execute.work(Execute.scala:235)
      at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
      at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
      at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
      at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      at java.lang.Thread.run(Thread.java:745)

pool-6-thread-1@6380, prio=5, in group 'main', status: 'RUNNING'
      at java.lang.System.setOut0(System.java:-1)
      at java.lang.System.setOut(System.java:176)
      at com.novocode.junit.OutputCapture.stop(OutputCapture.java:30)
      at com.novocode.junit.EventDispatcher.uncapture(EventDispatcher.java:173)
      at com.novocode.junit.EventDispatcher.testFinished(EventDispatcher.java:85)
      at org.junit.runner.notification.RunNotifier$7.notifyListener(RunNotifier.java:191)
      at org.junit.runner.notification.RunNotifier$SafeNotifier.run(RunNotifier.java:61)
      at org.junit.runner.notification.RunNotifier.fireTestFinished(RunNotifier.java:188)
      at org.junit.internal.runners.model.EachTestNotifier.fireTestFinished(EachTestNotifier.java:39)
      at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:277)
      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
      at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
      at org.junit.runners.Suite.runChild(Suite.java:127)
      at org.junit.runners.Suite.runChild(Suite.java:26)
      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
      at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
      at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
      at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
      at com.novocode.junit.JUnitRunner$1.execute(JUnitRunner.java:132)
      at sbt.TestRunner.runTest$1(TestFramework.scala:76)
      at sbt.TestRunner.run(TestFramework.scala:85)
      at sbt.TestFramework$$anon$2$$anonfun$$init$$1$$anonfun$apply$8.apply(TestFramework.scala:197)
      at sbt.TestFramework$$anon$2$$anonfun$$init$$1$$anonfun$apply$8.apply(TestFramework.scala:197)
      at sbt.TestFramework$.sbt$TestFramework$$withContextLoader(TestFramework.scala:185)
      at sbt.TestFramework$$anon$2$$anonfun$$init$$1.apply(TestFramework.scala:197)
      at sbt.TestFramework$$anon$2$$anonfun$$init$$1.apply(TestFramework.scala:197)
      at sbt.TestFunction.apply(TestFramework.scala:202)
      at sbt.Tests$$anonfun$9.apply(Tests.scala:216)
      at sbt.Tests$$anonfun$9.apply(Tests.scala:216)
      at sbt.std.Transform$$anon$3$$anonfun$apply$2.apply(System.scala:44)
      at sbt.std.Transform$$anon$3$$anonfun$apply$2.apply(System.scala:44)
      at sbt.std.Transform$$anon$4.work(System.scala:63)
      at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
      at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
      at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
      at sbt.Execute.work(Execute.scala:235)
      at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
      at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
      at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
      at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      at java.lang.Thread.run(Thread.java:745)

Signal Dispatcher@6930 daemon, prio=9, in group 'system', status: 'RUNNING'

Finalizer@6931 daemon, prio=8, in group 'system', status: 'WAIT'
      at java.lang.Object.wait(Object.java:-1)
      at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:142)
      at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:158)
      at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

Reference Handler@6932 daemon, prio=10, in group 'system', status: 'WAIT'
      at java.lang.Object.wait(Object.java:-1)
      at java.lang.Object.wait(Object.java:502)
      at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:157)

main@1, prio=5, in group 'main', status: 'WAIT'
      at sun.misc.Unsafe.park(Unsafe.java:-1)
      at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
      at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
      at java.util.concurrent.ExecutorCompletionService.take(ExecutorCompletionService.java:193)
      at sbt.ConcurrentRestrictions$$anon$4.take(ConcurrentRestrictions.scala:188)
      at sbt.Execute.next$1(Execute.scala:83)
      at sbt.Execute.processAll(Execute.scala:86)
      at sbt.Execute.runKeep(Execute.scala:66)
      at sbt.EvaluateTask$.liftedTree1$1(EvaluateTask.scala:342)
      at sbt.EvaluateTask$.run$1(EvaluateTask.scala:341)
      at sbt.EvaluateTask$.runTask(EvaluateTask.scala:361)
      at sbt.Aggregation$$anonfun$3.apply(Aggregation.scala:64)
      at sbt.Aggregation$$anonfun$3.apply(Aggregation.scala:62)
      at sbt.EvaluateTask$.withStreams(EvaluateTask.scala:293)
      at sbt.Aggregation$.timedRun(Aggregation.scala:62)
      at sbt.Aggregation$.runTasks(Aggregation.scala:71)
      at sbt.Aggregation$$anonfun$applyTasks$1.apply(Aggregation.scala:32)
      at sbt.Aggregation$$anonfun$applyTasks$1.apply(Aggregation.scala:31)
      at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:60)
      at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:60)
      at sbt.Aggregation$$anonfun$evaluatingParser$4$$anonfun$apply$5.apply(Aggregation.scala:153)
      at sbt.Aggregation$$anonfun$evaluatingParser$4$$anonfun$apply$5.apply(Aggregation.scala:152)
      at sbt.Act$$anonfun$sbt$Act$$actParser0$1$$anonfun$sbt$Act$$anonfun$$evaluate$1$1$$anonfun$apply$10.apply(Act.scala:244)
      at sbt.Act$$anonfun$sbt$Act$$actParser0$1$$anonfun$sbt$Act$$anonfun$$evaluate$1$1$$anonfun$apply$10.apply(Act.scala:241)
      at sbt.Command$.process(Command.scala:92)
      at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:98)
      at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:98)
      at sbt.State$$anon$1.process(State.scala:184)
      at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:98)
      at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:98)
      at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
      at sbt.MainLoop$.next(MainLoop.scala:98)
      at sbt.MainLoop$.run(MainLoop.scala:91)
      at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:70)
      at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:65)
      at sbt.Using.apply(Using.scala:24)
      at sbt.MainLoop$.runWithNewLog(MainLoop.scala:65)
      at sbt.MainLoop$.runAndClearLast(MainLoop.scala:48)
      at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:32)
      at sbt.MainLoop$.runLogged(MainLoop.scala:24)
      at sbt.StandardMain$.runManaged(Main.scala:53)
      at sbt.xMain.run(Main.scala:28)
      at xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:109)
      at xsbt.boot.Launch$.withContextLoader(Launch.scala:128)
      at xsbt.boot.Launch$.run(Launch.scala:109)
      at xsbt.boot.Launch$$anonfun$apply$1.apply(Launch.scala:35)
      at xsbt.boot.Launch$.launch(Launch.scala:117)
      at xsbt.boot.Launch$.apply(Launch.scala:18)
      at xsbt.boot.Boot$.runImpl(Boot.scala:41)
      at xsbt.boot.Boot$.main(Boot.scala:17)
      at xsbt.boot.Boot.main(Boot.scala:-1)

@benmccann
Copy link
Contributor Author

Thanks @retronym ! This is hugely helpful. Do you have any suggestions on how junit-interface should deal with this? Should this feature be implemented differently or should it be deprecated or removed as not making a lot of sense? It sounds like we should close this bug and file a bug at that project?

@retronym
Copy link
Member

At a minimum, it would be good to detect when it is being used in a parallel test run and try to fail fast.

I suppose junit-interface could to install a custom OutputStream that multiplexes across a ThreadLocal[OutputStream]. The test started event could increment an AtomicInteger counter, test finished would decrement. When the counter goes from 0 -> 1, this multiplexing stream would be installed as System.out, conversely when it goes from 1 -> 0 the original could be restored.

Googling ThreadLocalOutputStream yields a similar approach taken in startup-java-fast.

@retronym
Copy link
Member

I'll leave this issue open in case @eed3si9n wants to take defensive measure in SBT. It could save and restore the System streams around each line of the shell.

@som-snytt
Copy link
Contributor

Partest has also contended in that arena.

@benmccann
Copy link
Contributor Author

Thanks for all the help guys. I filed a bug at junit-interface. That project doesn't get enough love, so I tend to doubt it will be looked at unless someone here wants to take a stab. It's rather good to know what the issue is and that I should avoid using the -q option. Perhaps we can at least update the junit-interface docs to say that the option is broken and shouldn't be used.

@SethTisue
Copy link
Member

This is so old I think we could just close it. We could always reopen it if someone steps forward and says the problem remains reproducible.

@som-snytt
Copy link
Contributor

I could not reproduce. It requires jdk 8 for

[error] Caused by: java.lang.ClassNotFoundException: com.sun.tools.javac.code.TypeTags
[error]         at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:476)
[error]         at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:594)
[error]         at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527)
[error]         at java.base/java.lang.Class.forName0(Native Method)
[error]         at java.base/java.lang.Class.forName(Class.java:315)
[error]         at lombok.javac.JavacTreeMaker$SchroedingerType.getFieldCached(JavacTreeMaker.java:156)
[error]         at lombok.javac.JavacTreeMaker$TypeTag.typeTag(JavacTreeMaker.java:244)

and my sbt does not fetch 0.13, but 1.9.7 succeeds without tweaks, repeatedly

sbt:sbt-test-console-repro> test; test; test; test; test; test; test; test; test

I'm not going to do it again because I'm reminded that if you paste to jline, you don't get any history, even if you append to the command line. No up-arrow!

OK, I lied, as I retried with fork := true, which I suppose means fork the test process, and nothing to do with test parallelism. You see it slow down as it pauses to wait on the process exit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug uncategorized Used for Waffle integration
Projects
None yet
Development

No branches or pull requests

5 participants