broadinstitute / cromwell

Scientific workflow engine designed for simplicity & scalability. Trivially transition between one off use cases to massive scale production environments
http://cromwell.readthedocs.io/
BSD 3-Clause "New" or "Revised" License
996 stars 360 forks source link

Cromwell ill-mannered with missing pluggable backends #1683

Open mcovarr opened 7 years ago

mcovarr commented 7 years ago

When Cromwell is pointed to a config referencing a pluggable backend class that's not on the classpath, this is the result:

[me@computer ~]$ java8 -Dconfig.file=$PWD/cromwell.conf -jar cromwell.jar  server
Exception in thread "main" java.lang.ClassNotFoundException: cromwell.backend.impl.aws.AwsBackendActorFactory
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at cromwell.engine.backend.BackendConfigurationEntry.asBackendLifecycleActorFactory(BackendConfiguration.scala:11)
    at cromwell.engine.backend.CromwellBackends$$anonfun$1.apply(CromwellBackends.scala:12)
    at cromwell.engine.backend.CromwellBackends$$anonfun$1.apply(CromwellBackends.scala:12)
    at scala.collection.immutable.List.map(List.scala:277)
    at cromwell.engine.backend.CromwellBackends.<init>(CromwellBackends.scala:12)
    at cromwell.engine.backend.CromwellBackends$.initBackends(CromwellBackends.scala:40)
    at cromwell.server.CromwellSystem$class.$init$(CromwellSystem.scala:21)
    at cromwell.Main$$anon$1.<init>(Main.scala:20)
    at cromwell.Main$.CromwellSystem$lzycompute(Main.scala:20)
    at cromwell.Main$.CromwellSystem(Main.scala:20)
    at cromwell.Main$.delayedEndpoint$cromwell$Main$1(Main.scala:24)
    at cromwell.Main$delayedInit$body.apply(Main.scala:15)
    at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
    at scala.App$$anonfun$main$1.apply(App.scala:76)
    at scala.App$$anonfun$main$1.apply(App.scala:76)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35)
    at scala.App$class.main(App.scala:76)
    at cromwell.Main$.main(Main.scala:15)
    at cromwell.Main.main(Main.scala)
katevoss commented 7 years ago

@mcovarr has this changed in the last 9 months? It's labeled as AWS but doesn't sound specific to AWS.

mcovarr commented 7 years ago

Right, it's not specific to AWS. I tried this yesterday hoping it was like that other ticket and had magically been fixed, but now it dies without a stack trace so it's actually a little worse. 😦

katevoss commented 7 years ago

As a user running workflows and setting up configs, I want Cromwell to (fail nicely?) when I reference a pluggable backend class that's not on the classpath, so that I can (still run my workflow? get a nice error message?).

@geoffjentry