Use embedded media driver for StressSpec (#27037)

* Use embedded media driver for StressSpec

The current setup starts a media driver for each JVM in the same
directory which is caused the cnc file to be courruped in some way
so that the client in Akka timed out waiting for it to be initialized.

This test is disabled for Artery, see
https://github.com/akka/akka/issues/21810 so all it does is startup
and then end the test right away.

Will look at enabling the test again separately.

Fixes #27030
This commit is contained in:
Christopher Batey 2019-11-25 15:58:58 +00:00 committed by Arnout Engelen
parent b52271da1c
commit bc2d3aa4db
2 changed files with 5 additions and 11 deletions

View file

@ -10,9 +10,9 @@ import java.util.function.Consumer
import scala.annotation.tailrec import scala.annotation.tailrec
import scala.util.control.NonFatal import scala.util.control.NonFatal
import akka.remote.RemoteSettings import akka.remote.RemoteSettings
import akka.remote.artery.ArterySettings import akka.remote.artery.ArterySettings
import akka.remote.artery.ArterySettings.AeronUpd
import akka.remote.artery.aeron.TaskRunner import akka.remote.artery.aeron.TaskRunner
import akka.remote.testkit.MultiNodeConfig import akka.remote.testkit.MultiNodeConfig
import akka.remote.testkit.MultiNodeSpec import akka.remote.testkit.MultiNodeSpec
@ -27,11 +27,11 @@ object SharedMediaDriverSupport {
private val mediaDriver = new AtomicReference[Option[MediaDriver]](None) private val mediaDriver = new AtomicReference[Option[MediaDriver]](None)
def loadArterySettings(config: MultiNodeConfig): ArterySettings = def loadArterySettings(config: MultiNodeConfig): ArterySettings =
(new RemoteSettings(ConfigFactory.load(config.config))).Artery new RemoteSettings(ConfigFactory.load(config.config)).Artery
def startMediaDriver(config: MultiNodeConfig): Unit = { def startMediaDriver(config: MultiNodeConfig): Unit = {
val arterySettings = loadArterySettings(config) val arterySettings = loadArterySettings(config)
if (arterySettings.Enabled) { if (arterySettings.Enabled && arterySettings.Transport == AeronUpd) {
val aeronDir = arterySettings.Advanced.Aeron.AeronDirectoryName val aeronDir = arterySettings.Advanced.Aeron.AeronDirectoryName
require(aeronDir.nonEmpty, "aeron-dir must be defined") require(aeronDir.nonEmpty, "aeron-dir must be defined")
@ -48,7 +48,7 @@ object SharedMediaDriverSupport {
}) })
catch { catch {
case NonFatal(e) => case NonFatal(e) =>
println(e.getMessage) println("Exception checking isDriverActive: " + e.getMessage)
false false
} }
if (active) false if (active) false

View file

@ -129,8 +129,6 @@ private[cluster] object StressMultiJvmSpec extends MultiNodeConfig {
akka.remote.artery.advanced.aeron { akka.remote.artery.advanced.aeron {
idle-cpu-level = 1 idle-cpu-level = 1
embedded-media-driver = off
aeron-dir = "target/aeron-StressSpec"
} }
akka.actor.default-dispatcher.fork-join-executor { akka.actor.default-dispatcher.fork-join-executor {
@ -678,11 +676,7 @@ class StressMultiJvmNode12 extends StressSpec
class StressMultiJvmNode13 extends StressSpec class StressMultiJvmNode13 extends StressSpec
abstract class StressSpec abstract class StressSpec
extends MultiNodeSpec({ extends MultiNodeSpec(StressMultiJvmSpec)
// Aeron media driver must be started before ActorSystem
SharedMediaDriverSupport.startMediaDriver(StressMultiJvmSpec)
StressMultiJvmSpec
})
with MultiNodeClusterSpec with MultiNodeClusterSpec
with BeforeAndAfterEach with BeforeAndAfterEach
with ImplicitSender { with ImplicitSender {