FireCloud Orchestration Service
- URL: https://firecloud-orchestration.dsde-dev.broadinstitute.org/
- Github Repository: https://github.com/broadinstitute/firecloud-orchestration/
- IntelliJ IDEA can be downloaded here : https://www.jetbrains.com/idea/ . It is an 'Intelligent Java IDE'
- Configure the SBT plugin. "IntelliJ IDEA" -> "Preferences" -> "Plugins" can be used to do so (download, install)
- After running IntelliJ, open this source directory with File -> Open
- In the Import Project dialog, check "Create directories for empty content roots automatically" and set your Project SDK to 17
- Docker Desktop (4GB+, 8GB recommended)
- Broad internal internet connection (or VPN, non-split recommended)
- Render the local configuration files. From the root of this repo, run:
./local-dev/bin/render- The
/etc/hostsfile on your machine must contain this entry (for calling Orch endpoints):
127.0.0.1 local.dsde-dev.broadinstitute.orgAfter satisfying the above requirements, execute the following command from the root of the firecloud-orchestration repo:
./config/docker-rsync-local-orch.shIf Orch successfully starts up, you can now access the Orch Swagger page: https://local.dsde-dev.broadinstitute.org:10443/
- We push new features to a feature-branch and make pull requests against develop.
Run the assembly task to build a fat jar:
sbt
> assembly
For development, you can have sbt recompile and restart the server whenever a file changes on disk:
sbt
> ~ reStart
sbt test
To build the orch jar with docker, and then build the orch docker image, run:
./script/build.sh jar -d build
Remote debugging is enabled for firecloud-orchestration on port 5051. In order to debug in Intellij:
-
first modify the
build.sbtfile as follows:- Comment out the
Revolver.enableDebuggingline - Replace the
reStart / javaOptionsline withreStart / javaOptions ++= sys.env.getOrElse("JAVA_OPTS", "") .concat(" -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5051") .split(" ") .toList
That section of the
build.sbtfile should now look like this://Revolver.enableDebugging(port = 5051, suspend = false) // When JAVA_OPTS are specified in the environment, they are usually meant for the application // itself rather than sbt, but they are not passed by default to the application, which is a forked // process. This passes them through to the "re-start" command, which is probably what a developer // would normally expect. reStart / javaOptions ++= sys.env.getOrElse("JAVA_OPTS", "") .concat(" -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5051") .split(" ") .toList
- Comment out the
-
In Intellij, go to Run -> Edit Configurations
-
Choose "Add new Configuration" (the + sign)
-
Select "Remote JVM Debug" and set the following configuration:
- Debugger mode: Attach to remote JVM
- Host: localhost
- Port: 5051
-
Run the local firecloud docker with
./config/docker-rsync-local-orch.shfrom the root directory -
In Intellij, choose your debug configuration and run 'debug'.
Benchmarks reside in the benchmarks subdirectory,
and are accessible via an sbt subproject named bench.
Benchmarks are powered by JMH and integrated into sbt using the sbt-jmh plugin.
To execute benchmarks:
sbt bench/Jmh/run
To see options for running benchmarks:
sbt "bench/Jmh/run -h"
Example of specifying options when running benchmarks (this example sets 3 iterations, 2 warmup iterations, and one fork):
sbt "bench/Jmh/run -i 3 -wi 2 -f 1"
Running benchmarks takes a while, especially when specifying more iterations/warmups/forks. Of course, using more iterations/warmups/forks is also more accurate. Benchmark output is fairly verbose; look for the final summary that will look something like:
[info] Benchmark Mode Cnt Score Error Units
[info] TsvFormatterBenchmark.tsvSafeStringNoTab thrpt 3 85746770.866 ± 112486692.134 ops/s
[info] TsvFormatterBenchmark.tsvSafeStringWithTab thrpt 3 30601083.552 ± 53318975.049 ops/s