diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/SharedMediaDriverSupport.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/SharedMediaDriverSupport.scala index efd75e731f..b5d727e66b 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/SharedMediaDriverSupport.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/SharedMediaDriverSupport.scala @@ -19,6 +19,7 @@ import com.typesafe.config.ConfigFactory import io.aeron.driver.MediaDriver import io.aeron.driver.ThreadingMode import org.agrona.IoUtil +import io.aeron.CommonContext object SharedMediaDriverSupport { @@ -32,16 +33,6 @@ object SharedMediaDriverSupport { if (arterySettings.Enabled) { val aeronDir = arterySettings.Advanced.AeronDirectoryName require(aeronDir.nonEmpty, "aeron-dir must be defined") - val driverContext = new MediaDriver.Context - driverContext.aeronDirectoryName(aeronDir) - driverContext.clientLivenessTimeoutNs(arterySettings.Advanced.ClientLivenessTimeout.toNanos) - driverContext.imageLivenessTimeoutNs(arterySettings.Advanced.ImageLivenessTimeout.toNanos) - driverContext.driverTimeoutMs(arterySettings.Advanced.DriverTimeout.toMillis) - - val idleCpuLevel = arterySettings.Advanced.IdleCpuLevel - driverContext - .threadingMode(ThreadingMode.SHARED) - .sharedIdleStrategy(TaskRunner.createIdleStrategy(idleCpuLevel)) // Check if the media driver is already started by another multi-node jvm. // It checks more than one time with a sleep inbetween. The number of checks @@ -49,11 +40,15 @@ object SharedMediaDriverSupport { @tailrec def isDriverInactive(i: Int): Boolean = { if (i < 0) true else { - val active = driverContext.isDriverActive(5000, new Consumer[String] { + val active = try CommonContext.isDriverActive(new File(aeronDir), 5000, new Consumer[String] { override def accept(msg: String): Unit = { println(msg) } - }) + }) catch { + case NonFatal(e) ⇒ + println(e.getMessage) + false + } if (active) false else { Thread.sleep(500) @@ -64,6 +59,16 @@ object SharedMediaDriverSupport { try { if (isDriverInactive(MultiNodeSpec.selfIndex)) { + val driverContext = new MediaDriver.Context + driverContext.aeronDirectoryName(aeronDir) + driverContext.clientLivenessTimeoutNs(arterySettings.Advanced.ClientLivenessTimeout.toNanos) + driverContext.imageLivenessTimeoutNs(arterySettings.Advanced.ImageLivenessTimeout.toNanos) + driverContext.driverTimeoutMs(arterySettings.Advanced.DriverTimeout.toMillis) + val idleCpuLevel = arterySettings.Advanced.IdleCpuLevel + driverContext + .threadingMode(ThreadingMode.SHARED) + .sharedIdleStrategy(TaskRunner.createIdleStrategy(idleCpuLevel)) + val driver = MediaDriver.launchEmbedded(driverContext) println(s"Started media driver in directory [${driver.aeronDirectoryName}]") if (!mediaDriver.compareAndSet(None, Some(driver))) { diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 0506b47e04..0e5dc88a38 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -17,7 +17,7 @@ object Dependencies { val sslConfigVersion = "0.2.1" val slf4jVersion = "1.7.23" val scalaXmlVersion = "1.0.6" - val aeronVersion = "1.2.3" + val aeronVersion = "1.2.5" val Versions = Seq( crossScalaVersions := Seq("2.11.8", "2.12.1"),