Closed jsuereth closed 9 years ago
OMG we can't merge on master. I'll have to rebase.
Rebased to master.
Test failure:
[info] CoreLogEvent(LogMessage(debug,sbt general server logs are in: /home/travis/build/sbt/sbt-remote-control/it-runner/target/integration-test/com-typesafe-sbtrc-it-loading-CanCancelTasks/scratch/test/.sbtserver/master.log))
[info] CoreLogEvent(LogMessage(debug,> --initialize))
[info] CoreLogEvent(LogMessage(debug,> initialize))
[info] CoreLogEvent(LogMessage(debug,> onFailure load-failed))
[info] CoreLogEvent(LogMessage(debug,> boot))
[info] CoreLogEvent(LogMessage(debug,> reload))
[info] CoreLogEvent(LogStdErr(java.lang.UnsupportedOperationException: tail of empty list))
[info] CoreLogEvent(LogStdErr( at scala.collection.immutable.Nil$.tail(List.scala:339)))
[info] CoreLogEvent(LogStdErr( at scala.collection.immutable.Nil$.tail(List.scala:334)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.SymbolTable.popPhase(SymbolTable.scala:172)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.Symbols$Symbol.unsafeTypeParams(Symbols.scala:1477)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.Symbols$TypeSymbol.tpe(Symbols.scala:2777)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$$makeScalaPackage(JavaMirrors.scala:908)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.JavaMirrors$class.missingHook(JavaMirrors.scala:1296)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.JavaUniverse.missingHook(JavaUniverse.scala:12)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.Mirrors$RootsBase.universeMissingHook(Mirrors.scala:77)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.Mirrors$RootsBase.missingHook(Mirrors.scala:79)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readExtSymbol$1(UnPickler.scala:226)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readSymbol(UnPickler.scala:250)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readSymbolRef(UnPickler.scala:783)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readExtSymbol$1(UnPickler.scala:200)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readSymbol(UnPickler.scala:250)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readSymbolRef(UnPickler.scala:783)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readExtSymbol$1(UnPickler.scala:200)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readSymbol(UnPickler.scala:250)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readSymbolRef(UnPickler.scala:783)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.setSymName$1(UnPickler.scala:528)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readTree(UnPickler.scala:712)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$readTreeRef$1.apply(UnPickler.scala:796)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$readTreeRef$1.apply(UnPickler.scala:796)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.at(UnPickler.scala:171)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readTreeRef(UnPickler.scala:796)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readTree(UnPickler.scala:681)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$readTreeRef$1.apply(UnPickler.scala:796)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$readTreeRef$1.apply(UnPickler.scala:796)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.at(UnPickler.scala:171)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readTreeRef(UnPickler.scala:796)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readTree(UnPickler.scala:640)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$readTreeRef$1.apply(UnPickler.scala:796)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$readTreeRef$1.apply(UnPickler.scala:796)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.at(UnPickler.scala:171)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readTreeRef(UnPickler.scala:796)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$29.apply(UnPickler.scala:682)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$29.apply(UnPickler.scala:682)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.PickleBuffer.until(PickleBuffer.scala:163)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.PickleBuffer.until(PickleBuffer.scala:163)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.PickleBuffer.until(PickleBuffer.scala:163)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.PickleBuffer.until(PickleBuffer.scala:163)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readTree(UnPickler.scala:682)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$readTreeRef$1.apply(UnPickler.scala:796)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$readTreeRef$1.apply(UnPickler.scala:796)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.at(UnPickler.scala:171)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readTreeRef(UnPickler.scala:796)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readTree(UnPickler.scala:676)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$readAnnotArg$1.apply(UnPickler.scala:443)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan$$anonfun$readAnnotArg$1.apply(UnPickler.scala:443)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.at(UnPickler.scala:171)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readAnnotArg(UnPickler.scala:443)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readAnnotationInfo(UnPickler.scala:477)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.readSymbolAnnotation(UnPickler.scala:491)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler$Scan.run(UnPickler.scala:88)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.pickling.UnPickler.unpickle(UnPickler.scala:37)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.JavaMirrors$JavaMirror.unpickleClass(JavaMirrors.scala:565)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.SymbolLoaders$TopClassCompleter.complete(SymbolLoaders.scala:32)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1231)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.SymbolTable.openPackageModule(SymbolTable.scala:244)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.SymbolTable.openPackageModule(SymbolTable.scala:300)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.SymbolLoaders$LazyPackageType.complete(SymbolLoaders.scala:89)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1231)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$$makeScalaPackage(JavaMirrors.scala:902)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$packageToScala$1.apply(JavaMirrors.scala:878)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$packageToScala$1.apply(JavaMirrors.scala:878)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.TwoWayCache.toScala(TwoWayCache.scala:38)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.JavaMirrors$JavaMirror.packageToScala(JavaMirrors.scala:877)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.JavaMirrors$JavaMirror.sOwner(JavaMirrors.scala:786)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$classToScala1(JavaMirrors.scala:942)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$classToScala$1.apply(JavaMirrors.scala:935)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$classToScala$1.apply(JavaMirrors.scala:935)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$toScala$1.apply(JavaMirrors.scala:104)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.TwoWayCache.toScala(TwoWayCache.scala:38)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.JavaMirrors$JavaMirror.toScala(JavaMirrors.scala:102)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.JavaMirrors$JavaMirror.classToScala(JavaMirrors.scala:935)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.JavaMirrors$JavaMirror.classSymbol(JavaMirrors.scala:206)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.JavaMirrors$JavaMirror$JavaInstanceMirror.symbol(JavaMirrors.scala:245)))
[info] CoreLogEvent(LogStdErr( at scala.reflect.runtime.JavaMirrors$JavaMirror$JavaInstanceMirror.symbol(JavaMirrors.scala:243)))
[info] CoreLogEvent(LogStdErr( at sbt.Plugins$$anonfun$1.apply$mcZ$sp(Plugins.scala:336)))
[info] CoreLogEvent(LogStdErr( at sbt.Plugins$$anonfun$1.apply(Plugins.scala:336)))
[info] CoreLogEvent(LogStdErr( at sbt.Plugins$$anonfun$1.apply(Plugins.scala:336)))
[info] CoreLogEvent(LogStdErr( at scala.util.control.Exception$Catch$$anonfun$opt$1.apply(Exception.scala:118)))
[info] CoreLogEvent(LogStdErr( at scala.util.control.Exception$Catch$$anonfun$opt$1.apply(Exception.scala:118)))
[info] CoreLogEvent(LogStdErr( at scala.util.control.Exception$Catch.apply(Exception.scala:102)))
[info] CoreLogEvent(LogStdErr( at scala.util.control.Exception$Catch.opt(Exception.scala:118)))
[info] CoreLogEvent(LogStdErr( at sbt.Plugins$.hasAutoImportGetter(Plugins.scala:335)))
[info] CoreLogEvent(LogStdErr( at sbt.PluginDiscovery$$anonfun$1.apply(PluginDiscovery.scala:40)))
[info] CoreLogEvent(LogStdErr( at sbt.PluginDiscovery$$anonfun$1.apply(PluginDiscovery.scala:38)))
[info] CoreLogEvent(LogStdErr( at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)))
[info] CoreLogEvent(LogStdErr( at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)))
[info] CoreLogEvent(LogStdErr( at scala.collection.immutable.List.foreach(List.scala:318)))
[info] CoreLogEvent(LogStdErr( at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)))
[info] CoreLogEvent(LogStdErr( at scala.collection.AbstractTraversable.map(Traversable.scala:105)))
[info] CoreLogEvent(LogStdErr( at sbt.PluginDiscovery$.discoverAll(PluginDiscovery.scala:38)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.loadPlugins(Load.scala:833)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.loadPluginDefinition(Load.scala:790)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.noPlugins(Load.scala:783)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.plugins(Load.scala:775)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.loadUnit(Load.scala:431)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$$anonfun$18$$anonfun$apply$11.apply(Load.scala:281)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$$anonfun$18$$anonfun$apply$11.apply(Load.scala:281)))
[info] CoreLogEvent(LogStdErr( at sbt.BuildLoader$$anonfun$componentLoader$1$$anonfun$apply$4$$anonfun$apply$5$$anonfun$apply$6.apply(BuildLoader.scala:91)))
[info] CoreLogEvent(LogStdErr( at sbt.BuildLoader$$anonfun$componentLoader$1$$anonfun$apply$4$$anonfun$apply$5$$anonfun$apply$6.apply(BuildLoader.scala:90)))
[info] CoreLogEvent(LogStdErr( at sbt.BuildLoader.apply(BuildLoader.scala:140)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.loadAll(Load.scala:334)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.loadURI(Load.scala:289)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.load(Load.scala:285)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.load(Load.scala:276)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.apply(Load.scala:130)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.buildPluginDefinition(Load.scala:819)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.buildPlugins(Load.scala:785)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.plugins(Load.scala:773)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.loadUnit(Load.scala:431)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$$anonfun$18$$anonfun$apply$11.apply(Load.scala:281)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$$anonfun$18$$anonfun$apply$11.apply(Load.scala:281)))
[info] CoreLogEvent(LogStdErr( at sbt.BuildLoader$$anonfun$componentLoader$1$$anonfun$apply$4$$anonfun$apply$5$$anonfun$apply$6.apply(BuildLoader.scala:91)))
[info] CoreLogEvent(LogStdErr( at sbt.BuildLoader$$anonfun$componentLoader$1$$anonfun$apply$4$$anonfun$apply$5$$anonfun$apply$6.apply(BuildLoader.scala:90)))
[info] CoreLogEvent(LogStdErr( at sbt.BuildLoader.apply(BuildLoader.scala:140)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.loadAll(Load.scala:334)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.loadURI(Load.scala:289)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.load(Load.scala:285)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.load(Load.scala:276)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.apply(Load.scala:130)))
[info] CoreLogEvent(LogStdErr( at sbt.Load$.defaultLoad(Load.scala:36)))
[info] CoreLogEvent(LogStdErr( at sbt.BuiltinCommands$.doLoadProject(Main.scala:481)))
[info] CoreLogEvent(LogStdErr( at sbt.server.ServerBootCommand$$anonfun$projectReload$2.apply(ServerBoot.scala:36)))
[info] CoreLogEvent(LogStdErr( at sbt.server.ServerBootCommand$$anonfun$projectReload$2.apply(ServerBoot.scala:33)))
[info] CoreLogEvent(LogStdErr( at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:58)))
[info] CoreLogEvent(LogStdErr( at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:58)))
[info] CoreLogEvent(LogStdErr( at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:60)))
[info] CoreLogEvent(LogStdErr( at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:60)))
[info] CoreLogEvent(LogStdErr( at sbt.Command$.process(Command.scala:92)))
[info] CoreLogEvent(LogStdErr( at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:98)))
[info] CoreLogEvent(LogStdErr( at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:98)))
[info] CoreLogEvent(LogStdErr( at sbt.State$$anon$1.process(State.scala:184)))
[info] CoreLogEvent(LogStdErr( at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:98)))
[info] CoreLogEvent(LogStdErr( at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:98)))
[info] CoreLogEvent(LogStdErr( at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)))
[info] CoreLogEvent(LogStdErr( at sbt.MainLoop$.next(MainLoop.scala:98)))
[info] CoreLogEvent(LogStdErr( at sbt.MainLoop$.run(MainLoop.scala:91)))
[info] CoreLogEvent(LogStdErr( at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:70)))
[info] CoreLogEvent(LogStdErr( at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:65)))
[info] CoreLogEvent(LogStdErr( at sbt.Using.apply(Using.scala:24)))
[info] CoreLogEvent(LogStdErr( at sbt.MainLoop$.runWithNewLog(MainLoop.scala:65)))
[info] CoreLogEvent(LogStdErr( at sbt.MainLoop$.runAndClearLast(MainLoop.scala:48)))
[info] CoreLogEvent(LogStdErr( at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:32)))
[info] CoreLogEvent(LogStdErr( at sbt.MainLoop$.runLogged(MainLoop.scala:24)))
[info] CoreLogEvent(LogStdErr( at sbt.StandardMain$.runManaged(Main.scala:53)))
[info] CoreLogEvent(LogStdErr( at sbt.server.ServerEngine.execute(ServerEngine.scala:223)))
[info] CoreLogEvent(LogStdErr( at sbt.server.SbtServer$$anon$1.run(SbtServer.scala:49)))
[info] CoreLogEvent(LogTrace(RuntimeException,error reading Scala signature of sbt.package: tail of empty list))
[info] CoreLogEvent(LogMessage(error,error reading Scala signature of sbt.package: tail of empty list))
[info] CoreLogEvent(LogMessage(error,Use 'last' for the full log.))
[info] CoreLogEvent(LogMessage(debug,> load-failed))
Looks legit.... ideas?
To clarify, this error seems to be about scala/scala's UnPickler, not scala/pickling. And the launch off point from our code base is around:
See sbt/sbt@ff77d0b0f2794b4b1f4e095a5f6b6037b2aedcca
Hmm, so how do we remove this breakage?
Right, so why is our generated sbt project failing w/ this?
Can you reproduce it by running sbt in the project with no integration tests / sbt server involved? If so it'd be a lot easier to debug.
hmm, looks like an sbt version incompatibility in sbt-server + plugins.... odd....
oh, krap.... could I have released pickling on JDK8?
Nevremnid, someohw someone wired scala 2.11 onto scala 2.10 dependencies in the build, so the integraiton tests are failing because we have illegitimate scala deps showing up in places
Quick note, I reproduced the issue on OpenJDK7. There's somethign about that. I'm going to re-release a pickling milestone against Oracle JDK7 (rather than 8) and see if that helps fix it...
Ok, I seem to have gotten things working on OpenJDK7 locally. @eed3si9n can you enlighten us as to what the issue with sbt reflection + plugins was? If this depends on sbt 0.13.8-M1 for successful release of the ui-interface plugin, that may push the whole release chain back as we'll need a stable sbt 0.13.8 before we can release this project.....
Latest commits look good. Something about the akka spec fails on oracle JDK, but maybe we should ignore for now?
Play plugin uses the Akka stuff so it depends on whether it's going to happen there. Might be worth just trying what we have and we can and will make a new release shortly.
@havocp Right, but I don't understand why that one will fail its tests unless it also is running into the dynamic-serialization issue due to threading, and so we have flaky tests now. I'm trying to catch a better failure right now to understand.
scala/pickling as a serializer
This represents on metric load of work from @eed3si9n @havocp and myself (but mostly the first two).
One thing which is slightly disconcerting is random NPEs in Throwable serialziation/deserialization. Need to figure out why these randomnly show up, but locally i have all tests passing.