typesafehub / sbt-conductr

Typesafe ConductR plugin for sbt
Other
29 stars 22 forks source link

conductr:controlServer + load not working in 0.27.0 #60

Closed dsugden closed 9 years ago

dsugden commented 9 years ago

I upgraded from 0.25.0, cleaned etc.

this is running on a vagrant conductr cluster that is known to work with sbt-typesafe-conductr 0.25.0 (ie, the control server is accessible etc.)

with the latest (0.27.0) I run:

conductr:controlServer 192.168.77.20:9005 [success] Total time: 0 s, completed 8-Apr-2015 9:58:41 AM

bundle:dist ... [info] Packaging /Users/dave/projects/akka/conductrR-examples/singlemicro/target/scala-2.11/singlemicro_2.11-1.0.0.jar ... [info] Done packaging. [success] Total time: 9 s, completed 8-Apr-2015 10:01:29 AM

conductr:load file:/Users/dave/projects/akka/conductrR-examples/singlemicro/target/typesafe-conductr/singlemicro-1.0.0-aceb2bbfa176b1b1b00794d03ebe483f49adb744e073d1668d2561ae467319f4.zip [info] Loading bundle to ConductR ... [trace] Stack trace suppressed: run last singlemicro/conductr:load for the full output. error Problem loading the bundle: empty stream [error] Total time: 1 s, completed 8-Apr-2015 10:01:45 AM

last singlemicro/conductr:load java.lang.RuntimeException: Problem loading the bundle: empty stream at scala.sys.package$.error(package.scala:27) at com.typesafe.conductr.sbt.SbtTypesafeConductR$$anonfun$loadBundleTask$1$$anonfun$apply$21$$anonfun$apply$22$$anonfun$com$typesafe$conductr$sbt$SbtTypesafeConductR$$anonfun$$anonfun$$anonfun$$loadBundle$1$1.apply(SbtTypesafeConductR.scala:170) at com.typesafe.conductr.sbt.SbtTypesafeConductR$$anonfun$loadBundleTask$1$$anonfun$apply$21$$anonfun$apply$22$$anonfun$com$typesafe$conductr$sbt$SbtTypesafeConductR$$anonfun$$anonfun$$anonfun$$loadBundle$1$1.apply(SbtTypesafeConductR.scala:146) at com.typesafe.conductr.sbt.SbtTypesafeConductR$.com$typesafe$conductr$sbt$SbtTypesafeConductR$$withConductRController(SbtTypesafeConductR.scala:309) at com.typesafe.conductr.sbt.SbtTypesafeConductR$$anonfun$loadBundleTask$1$$anonfun$apply$21$$anonfun$apply$22.com$typesafe$conductr$sbt$SbtTypesafeConductR$$anonfun$$anonfun$$anonfun$$loadBundle$1(SbtTypesafeConductR.scala:146) at com.typesafe.conductr.sbt.SbtTypesafeConductR$$anonfun$loadBundleTask$1$$anonfun$apply$21$$anonfun$apply$22$$anonfun$apply$25.apply(SbtTypesafeConductR.scala:174) at com.typesafe.conductr.sbt.SbtTypesafeConductR$$anonfun$loadBundleTask$1$$anonfun$apply$21$$anonfun$apply$22$$anonfun$apply$25.apply(SbtTypesafeConductR.scala:174) at scala.Function3$$anonfun$curried$1$$anonfun$apply$1$$anonfun$apply$2.apply(Function3.scala:26) at org.scalactic.Accumulation$class.withGoodCurried(Accumulation.scala:411) at org.scalactic.Accumulation$class.withGood(Accumulation.scala:398) at org.scalactic.Accumulation$.withGood(Accumulation.scala:1628) at com.typesafe.conductr.sbt.SbtTypesafeConductR$$anonfun$loadBundleTask$1$$anonfun$apply$21$$anonfun$apply$22.apply(SbtTypesafeConductR.scala:174) at com.typesafe.conductr.sbt.SbtTypesafeConductR$$anonfun$loadBundleTask$1$$anonfun$apply$21$$anonfun$apply$22.apply(SbtTypesafeConductR.scala:140) at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47) at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40) 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:262) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) error Problem loading the bundle: empty stream

edwardcallahan commented 9 years ago

It only working for 127.0.0.1. Instead of empty stream, I get java.lang.RuntimeException: Problem loading the bundle: Connection failed. It works if you have ConductR reachable on localhost. cc: @huntc

huntc commented 9 years ago

@ktoso Could this be related to recent changes?

dsugden commented 9 years ago

in TypesafeConductR

val request = LoadBundle( HttpUri(bundle.toString), config map (u => HttpUri(u.toString)), stm, nrOfCpus, memory.underlying, diskSpace.underlying, roles )

config here is None

this is passed in from:

def loadSubtask(b: Option[File]): Parser[LoadSubtask] = (token("load") ~> Space ~> bundle(b) ~ configuration.?) map { case (b, config) => LoadSubtask(b, config) }

where configuration is: def configuration: Parser[URI] = Space ~> token(basicUri)

so, if you type conductr load file:///bundle.. http://x.x.x.x:9005

you get LoadSubtask(bundlefile, Some(http://x.x.x.x:9005))

dsugden commented 9 years ago

You guys tell me to shut up whenever, I'm enjoying poking around though...

it looks like the ConductRController Actor is created in globalSetttings:

onLoad := onLoad.value.andThen(loadActorSystem).andThen(loadConductRController)

and is initialized with

url <- (conductrControlServerUrl in Global).get(settings)

So, not sure when/how the user inputted controlServer makes its way into that actor...

dsugden commented 9 years ago

just read the other issue where @ktoso talks about supporting different configurations at load time. I guess that is what the LoadBundle.config URI is.

Would it make sense to define another message for ConductRController to set a host on

case Some(ControlServerSubtask(host)) =>

like:

TypesafeConductR.setControlServer(host)

?