-
Notifications
You must be signed in to change notification settings - Fork 0
ARCHIVED: Do you need a Strongback?
This content is obsolete, Strongback functionality was removed as it was slow and hard to maintain.
Great question! Maybe, it depends. I think we need to answer a different question first:
Of course we are talking about JVM forks and Abort-Mission Boosters, but sadly the outcome would be similar. As discussed in the Parallel test execution and test isolation post, Abort-Mission has a few limitations, when it comes to multiple JVMs or multiple test suites. The root cause of this is the static access to the singleton context objects and the suboptimal binding of the reporting call which dumps all of the telemetry into a JSON when the test suite execution completed.
Lucky for us, this was only true for the early versions of Abort-Mission, since v2.6.0
introduced the concept of the Strongbacks.
In reality, it would be the support structure to the left. For Abort-Mission, the concept is similar, it is something that gives extra support to our Boosters. The first few implementations are all focusing on the JVM fork problem (because it clearly looks more workable this way, than in case of the first image), but it should not be limited to this. It can be more or less anything you need to set up (erect) at the beginning of the launch and tear down (retract) when the launch is completed.
These components are starting up an external service for telemetry collection and reporting purposes. They both come in two parts. One that is the actual Strongback process, started and stopped by the Gradle plugin automatically (when using v2.0.0
or later plugin), the other is the collector class that will know how to connect the dots. This collector replaces the built-in statistics collector and makes sure to write and read through the JDBC or RMI connection with the Strongback process.
Both of them get the job done, but there are some differences you might need to consider:
- If you want the best performance, RMI is 4-5 times faster among the two
- H2 can have the advantage of being persistent or you could even set up an H2 server yourself and simply tell the Strongback to connect to that.
When I started this work, I needed to reliably reproduce it first. So I have created a new Yippee-Ki-JSON demo branch and set up heavy forking. In case you are interested, you can try it in the demo/abort-mission-jvm-forks branch