Fix artery test file leak #21484
* Include actor system name in artery dir path to ease debugging leaks * Base class name changed to make actor system autonaming work * Add shutdown hook directly in transport start * Wait for completion in shutdown hook (actual leak fix)
This commit is contained in:
parent
133bafdf04
commit
a939e30b49
28 changed files with 78 additions and 88 deletions
|
|
@ -46,7 +46,7 @@ trait FlightRecordingSupport { self: MultiNodeSpec ⇒
|
||||||
final protected def printFlightRecording(): Unit = {
|
final protected def printFlightRecording(): Unit = {
|
||||||
if (arteryEnabled && destinationIsValidForDump() && Files.exists(flightRecorderFile)) {
|
if (arteryEnabled && destinationIsValidForDump() && Files.exists(flightRecorderFile)) {
|
||||||
// use stdout/println as we do not know if the system log is alive
|
// use stdout/println as we do not know if the system log is alive
|
||||||
println("Flight recorder dump:")
|
println(s"Flight recorder dump from '$flightRecorderFile':")
|
||||||
FlightRecorderReader.dumpToStdout(flightRecorderFile)
|
FlightRecorderReader.dumpToStdout(flightRecorderFile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ class AttemptSysMsgRedeliveryMultiJvmSpec(artery: Boolean) extends MultiNodeConf
|
||||||
commonConfig(debugConfig(on = false).withFallback(
|
commonConfig(debugConfig(on = false).withFallback(
|
||||||
ConfigFactory.parseString(s"""
|
ConfigFactory.parseString(s"""
|
||||||
akka.remote.artery.enabled = $artery
|
akka.remote.artery.enabled = $artery
|
||||||
""")).withFallback(MultiNodeRemotingSpec.arteryFlightRecordingConf))
|
""")).withFallback(RemotingMultiNodeSpec.arteryFlightRecordingConf))
|
||||||
|
|
||||||
testTransport(on = true)
|
testTransport(on = true)
|
||||||
|
|
||||||
|
|
@ -53,7 +53,7 @@ object AttemptSysMsgRedeliverySpec {
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class AttemptSysMsgRedeliverySpec(multiNodeConfig: AttemptSysMsgRedeliveryMultiJvmSpec)
|
abstract class AttemptSysMsgRedeliverySpec(multiNodeConfig: AttemptSysMsgRedeliveryMultiJvmSpec)
|
||||||
extends MultiNodeRemotingSpec(multiNodeConfig) {
|
extends RemotingMultiNodeSpec(multiNodeConfig) {
|
||||||
import multiNodeConfig._
|
import multiNodeConfig._
|
||||||
import AttemptSysMsgRedeliverySpec._
|
import AttemptSysMsgRedeliverySpec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ class LookupRemoteActorMultiJvmSpec(artery: Boolean) extends MultiNodeConfig {
|
||||||
commonConfig(debugConfig(on = false).withFallback(
|
commonConfig(debugConfig(on = false).withFallback(
|
||||||
ConfigFactory.parseString(s"""
|
ConfigFactory.parseString(s"""
|
||||||
akka.remote.artery.enabled = $artery
|
akka.remote.artery.enabled = $artery
|
||||||
""")).withFallback(MultiNodeRemotingSpec.arteryFlightRecordingConf))
|
""")).withFallback(RemotingMultiNodeSpec.arteryFlightRecordingConf))
|
||||||
|
|
||||||
val master = role("master")
|
val master = role("master")
|
||||||
val slave = role("slave")
|
val slave = role("slave")
|
||||||
|
|
@ -40,7 +40,7 @@ object LookupRemoteActorSpec {
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class LookupRemoteActorSpec(multiNodeConfig: LookupRemoteActorMultiJvmSpec)
|
abstract class LookupRemoteActorSpec(multiNodeConfig: LookupRemoteActorMultiJvmSpec)
|
||||||
extends MultiNodeRemotingSpec(multiNodeConfig) {
|
extends RemotingMultiNodeSpec(multiNodeConfig) {
|
||||||
import multiNodeConfig._
|
import multiNodeConfig._
|
||||||
import LookupRemoteActorSpec._
|
import LookupRemoteActorSpec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ class NewRemoteActorMultiJvmSpec(artery: Boolean) extends MultiNodeConfig {
|
||||||
ConfigFactory.parseString(s"""
|
ConfigFactory.parseString(s"""
|
||||||
akka.remote.log-remote-lifecycle-events = off
|
akka.remote.log-remote-lifecycle-events = off
|
||||||
akka.remote.artery.enabled = $artery
|
akka.remote.artery.enabled = $artery
|
||||||
""").withFallback(MultiNodeRemotingSpec.arteryFlightRecordingConf)))
|
""").withFallback(RemotingMultiNodeSpec.arteryFlightRecordingConf)))
|
||||||
|
|
||||||
val master = role("master")
|
val master = role("master")
|
||||||
val slave = role("slave")
|
val slave = role("slave")
|
||||||
|
|
@ -55,7 +55,7 @@ object NewRemoteActorSpec {
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class NewRemoteActorSpec(multiNodeConfig: NewRemoteActorMultiJvmSpec)
|
abstract class NewRemoteActorSpec(multiNodeConfig: NewRemoteActorMultiJvmSpec)
|
||||||
extends MultiNodeRemotingSpec(multiNodeConfig) {
|
extends RemotingMultiNodeSpec(multiNodeConfig) {
|
||||||
import multiNodeConfig._
|
import multiNodeConfig._
|
||||||
import NewRemoteActorSpec._
|
import NewRemoteActorSpec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ class PiercingShouldKeepQuarantineConfig(artery: Boolean) extends MultiNodeConfi
|
||||||
ConfigFactory.parseString(s"""
|
ConfigFactory.parseString(s"""
|
||||||
akka.remote.retry-gate-closed-for = 0.5s
|
akka.remote.retry-gate-closed-for = 0.5s
|
||||||
akka.remote.artery.enabled = $artery
|
akka.remote.artery.enabled = $artery
|
||||||
""")).withFallback(MultiNodeRemotingSpec.arteryFlightRecordingConf))
|
""")).withFallback(RemotingMultiNodeSpec.arteryFlightRecordingConf))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -38,7 +38,7 @@ object PiercingShouldKeepQuarantineSpec {
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class PiercingShouldKeepQuarantineSpec(multiNodeConfig: PiercingShouldKeepQuarantineConfig)
|
abstract class PiercingShouldKeepQuarantineSpec(multiNodeConfig: PiercingShouldKeepQuarantineConfig)
|
||||||
extends MultiNodeRemotingSpec(multiNodeConfig) {
|
extends RemotingMultiNodeSpec(multiNodeConfig) {
|
||||||
import multiNodeConfig._
|
import multiNodeConfig._
|
||||||
import PiercingShouldKeepQuarantineSpec._
|
import PiercingShouldKeepQuarantineSpec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ class RemoteDeliveryConfig(artery: Boolean) extends MultiNodeConfig {
|
||||||
commonConfig(debugConfig(on = false).withFallback(
|
commonConfig(debugConfig(on = false).withFallback(
|
||||||
ConfigFactory.parseString(s"""
|
ConfigFactory.parseString(s"""
|
||||||
akka.remote.artery.enabled = $artery
|
akka.remote.artery.enabled = $artery
|
||||||
""")).withFallback(MultiNodeRemotingSpec.arteryFlightRecordingConf))
|
""")).withFallback(RemotingMultiNodeSpec.arteryFlightRecordingConf))
|
||||||
}
|
}
|
||||||
|
|
||||||
class RemoteDeliveryMultiJvmNode1 extends RemoteDeliverySpec(new RemoteDeliveryConfig(artery = false))
|
class RemoteDeliveryMultiJvmNode1 extends RemoteDeliverySpec(new RemoteDeliveryConfig(artery = false))
|
||||||
|
|
@ -48,7 +48,7 @@ object RemoteDeliverySpec {
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class RemoteDeliverySpec(multiNodeConfig: RemoteDeliveryConfig)
|
abstract class RemoteDeliverySpec(multiNodeConfig: RemoteDeliveryConfig)
|
||||||
extends MultiNodeRemotingSpec(multiNodeConfig) {
|
extends RemotingMultiNodeSpec(multiNodeConfig) {
|
||||||
import multiNodeConfig._
|
import multiNodeConfig._
|
||||||
import RemoteDeliverySpec._
|
import RemoteDeliverySpec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ class RemoteDeploymentDeathWatchMultiJvmSpec(artery: Boolean) extends MultiNodeC
|
||||||
akka.loglevel = INFO
|
akka.loglevel = INFO
|
||||||
akka.remote.log-remote-lifecycle-events = off
|
akka.remote.log-remote-lifecycle-events = off
|
||||||
akka.remote.artery.enabled = $artery
|
akka.remote.artery.enabled = $artery
|
||||||
""")).withFallback(MultiNodeRemotingSpec.arteryFlightRecordingConf))
|
""")).withFallback(RemotingMultiNodeSpec.arteryFlightRecordingConf))
|
||||||
|
|
||||||
deployOn(second, """/hello.remote = "@third@" """)
|
deployOn(second, """/hello.remote = "@third@" """)
|
||||||
|
|
||||||
|
|
@ -69,7 +69,7 @@ object RemoteDeploymentDeathWatchSpec {
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class RemoteDeploymentDeathWatchSpec(multiNodeConfig: RemoteDeploymentDeathWatchMultiJvmSpec)
|
abstract class RemoteDeploymentDeathWatchSpec(multiNodeConfig: RemoteDeploymentDeathWatchMultiJvmSpec)
|
||||||
extends MultiNodeRemotingSpec(multiNodeConfig) {
|
extends RemotingMultiNodeSpec(multiNodeConfig) {
|
||||||
import multiNodeConfig._
|
import multiNodeConfig._
|
||||||
import RemoteDeploymentDeathWatchSpec._
|
import RemoteDeploymentDeathWatchSpec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ class RemoteGatePiercingSpecMultiJvmNode1 extends RemoteGatePiercingSpec
|
||||||
class RemoteGatePiercingSpecMultiJvmNode2 extends RemoteGatePiercingSpec
|
class RemoteGatePiercingSpecMultiJvmNode2 extends RemoteGatePiercingSpec
|
||||||
|
|
||||||
abstract class RemoteGatePiercingSpec
|
abstract class RemoteGatePiercingSpec
|
||||||
extends MultiNodeRemotingSpec(RemoteGatePiercingSpec) {
|
extends RemotingMultiNodeSpec(RemoteGatePiercingSpec) {
|
||||||
|
|
||||||
import RemoteGatePiercingSpec._
|
import RemoteGatePiercingSpec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ package akka.remote
|
||||||
|
|
||||||
import language.postfixOps
|
import language.postfixOps
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
import com.typesafe.config.ConfigFactory
|
import com.typesafe.config.{ Config, ConfigFactory }
|
||||||
import akka.actor.Actor
|
import akka.actor.Actor
|
||||||
import akka.actor.ActorIdentity
|
import akka.actor.ActorIdentity
|
||||||
import akka.actor.ActorRef
|
import akka.actor.ActorRef
|
||||||
|
|
@ -31,7 +31,7 @@ class RemoteNodeDeathWatchConfig(artery: Boolean) extends MultiNodeConfig {
|
||||||
## Use a tighter setting than the default, otherwise it takes 20s for DeathWatch to trigger
|
## Use a tighter setting than the default, otherwise it takes 20s for DeathWatch to trigger
|
||||||
akka.remote.watch-failure-detector.acceptable-heartbeat-pause = 3 s
|
akka.remote.watch-failure-detector.acceptable-heartbeat-pause = 3 s
|
||||||
akka.remote.artery.enabled = $artery
|
akka.remote.artery.enabled = $artery
|
||||||
""")).withFallback(MultiNodeRemotingSpec.arteryFlightRecordingConf))
|
""")).withFallback(RemotingMultiNodeSpec.arteryFlightRecordingConf))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -92,7 +92,7 @@ object RemoteNodeDeathWatchSpec {
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class RemoteNodeDeathWatchSpec(multiNodeConfig: RemoteNodeDeathWatchConfig)
|
abstract class RemoteNodeDeathWatchSpec(multiNodeConfig: RemoteNodeDeathWatchConfig)
|
||||||
extends MultiNodeRemotingSpec(multiNodeConfig) {
|
extends RemotingMultiNodeSpec(multiNodeConfig) {
|
||||||
import multiNodeConfig._
|
import multiNodeConfig._
|
||||||
import RemoteNodeDeathWatchSpec._
|
import RemoteNodeDeathWatchSpec._
|
||||||
import RemoteWatcher._
|
import RemoteWatcher._
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ object RemoteNodeRestartDeathWatchSpec {
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class RemoteNodeRestartDeathWatchSpec(multiNodeConfig: RemoteNodeRestartDeathWatchConfig)
|
abstract class RemoteNodeRestartDeathWatchSpec(multiNodeConfig: RemoteNodeRestartDeathWatchConfig)
|
||||||
extends MultiNodeRemotingSpec(multiNodeConfig) {
|
extends RemotingMultiNodeSpec(multiNodeConfig) {
|
||||||
import multiNodeConfig._
|
import multiNodeConfig._
|
||||||
import RemoteNodeRestartDeathWatchSpec._
|
import RemoteNodeRestartDeathWatchSpec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ class RemoteNodeRestartGateSpecMultiJvmNode1 extends RemoteNodeRestartGateSpec
|
||||||
class RemoteNodeRestartGateSpecMultiJvmNode2 extends RemoteNodeRestartGateSpec
|
class RemoteNodeRestartGateSpecMultiJvmNode2 extends RemoteNodeRestartGateSpec
|
||||||
|
|
||||||
abstract class RemoteNodeRestartGateSpec
|
abstract class RemoteNodeRestartGateSpec
|
||||||
extends MultiNodeRemotingSpec(RemoteNodeRestartGateSpec) {
|
extends RemotingMultiNodeSpec(RemoteNodeRestartGateSpec) {
|
||||||
|
|
||||||
import RemoteNodeRestartGateSpec._
|
import RemoteNodeRestartGateSpec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ class RemoteNodeShutdownAndComesBackMultiJvmNode1 extends RemoteNodeShutdownAndC
|
||||||
class RemoteNodeShutdownAndComesBackMultiJvmNode2 extends RemoteNodeShutdownAndComesBackSpec
|
class RemoteNodeShutdownAndComesBackMultiJvmNode2 extends RemoteNodeShutdownAndComesBackSpec
|
||||||
|
|
||||||
abstract class RemoteNodeShutdownAndComesBackSpec
|
abstract class RemoteNodeShutdownAndComesBackSpec
|
||||||
extends MultiNodeRemotingSpec(RemoteNodeShutdownAndComesBackSpec) {
|
extends RemotingMultiNodeSpec(RemoteNodeShutdownAndComesBackSpec) {
|
||||||
|
|
||||||
import RemoteNodeShutdownAndComesBackSpec._
|
import RemoteNodeShutdownAndComesBackSpec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ class RemoteQuarantinePiercingConfig(artery: Boolean) extends MultiNodeConfig {
|
||||||
akka.loglevel = INFO
|
akka.loglevel = INFO
|
||||||
akka.remote.log-remote-lifecycle-events = INFO
|
akka.remote.log-remote-lifecycle-events = INFO
|
||||||
akka.remote.artery.enabled = $artery
|
akka.remote.artery.enabled = $artery
|
||||||
""")).withFallback(MultiNodeRemotingSpec.arteryFlightRecordingConf))
|
""")).withFallback(RemotingMultiNodeSpec.arteryFlightRecordingConf))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -51,7 +51,7 @@ object RemoteQuarantinePiercingSpec {
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class RemoteQuarantinePiercingSpec(multiNodeConfig: RemoteQuarantinePiercingConfig)
|
abstract class RemoteQuarantinePiercingSpec(multiNodeConfig: RemoteQuarantinePiercingConfig)
|
||||||
extends MultiNodeRemotingSpec(multiNodeConfig) {
|
extends RemotingMultiNodeSpec(multiNodeConfig) {
|
||||||
import multiNodeConfig._
|
import multiNodeConfig._
|
||||||
import RemoteQuarantinePiercingSpec._
|
import RemoteQuarantinePiercingSpec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ class RemoteReDeploymentConfig(artery: Boolean) extends MultiNodeConfig {
|
||||||
acceptable-heartbeat-pause=2.5s
|
acceptable-heartbeat-pause=2.5s
|
||||||
}
|
}
|
||||||
akka.remote.artery.enabled = $artery
|
akka.remote.artery.enabled = $artery
|
||||||
""")).withFallback(MultiNodeRemotingSpec.arteryFlightRecordingConf))
|
""")).withFallback(RemotingMultiNodeSpec.arteryFlightRecordingConf))
|
||||||
|
|
||||||
testTransport(on = true)
|
testTransport(on = true)
|
||||||
|
|
||||||
|
|
@ -106,7 +106,7 @@ object RemoteReDeploymentMultiJvmSpec {
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class RemoteReDeploymentMultiJvmSpec(multiNodeConfig: RemoteReDeploymentConfig)
|
abstract class RemoteReDeploymentMultiJvmSpec(multiNodeConfig: RemoteReDeploymentConfig)
|
||||||
extends MultiNodeRemotingSpec(multiNodeConfig) {
|
extends RemotingMultiNodeSpec(multiNodeConfig) {
|
||||||
|
|
||||||
def sleepAfterKill: FiniteDuration
|
def sleepAfterKill: FiniteDuration
|
||||||
def expectQuarantine: Boolean
|
def expectQuarantine: Boolean
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ class RemoteRestartedQuarantinedSpecMultiJvmNode1 extends RemoteRestartedQuarant
|
||||||
class RemoteRestartedQuarantinedSpecMultiJvmNode2 extends RemoteRestartedQuarantinedSpec
|
class RemoteRestartedQuarantinedSpecMultiJvmNode2 extends RemoteRestartedQuarantinedSpec
|
||||||
|
|
||||||
abstract class RemoteRestartedQuarantinedSpec
|
abstract class RemoteRestartedQuarantinedSpec
|
||||||
extends MultiNodeRemotingSpec(RemoteRestartedQuarantinedSpec) {
|
extends RemotingMultiNodeSpec(RemoteRestartedQuarantinedSpec) {
|
||||||
|
|
||||||
import RemoteRestartedQuarantinedSpec._
|
import RemoteRestartedQuarantinedSpec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import akka.testkit.{ DefaultTimeout, ImplicitSender }
|
||||||
import com.typesafe.config.ConfigFactory
|
import com.typesafe.config.ConfigFactory
|
||||||
import org.scalatest.{ Outcome, Suite }
|
import org.scalatest.{ Outcome, Suite }
|
||||||
|
|
||||||
object MultiNodeRemotingSpec {
|
object RemotingMultiNodeSpec {
|
||||||
|
|
||||||
def arteryFlightRecordingConf =
|
def arteryFlightRecordingConf =
|
||||||
ConfigFactory.parseString(
|
ConfigFactory.parseString(
|
||||||
|
|
@ -23,7 +23,7 @@ object MultiNodeRemotingSpec {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class MultiNodeRemotingSpec(config: MultiNodeConfig) extends MultiNodeSpec(config)
|
abstract class RemotingMultiNodeSpec(config: MultiNodeConfig) extends MultiNodeSpec(config)
|
||||||
with Suite
|
with Suite
|
||||||
with STMultiNodeSpec
|
with STMultiNodeSpec
|
||||||
with FlightRecordingSupport
|
with FlightRecordingSupport
|
||||||
|
|
@ -47,7 +47,7 @@ object Ticket15109Spec extends MultiNodeConfig {
|
||||||
class Ticket15109SpecMultiJvmNode1 extends Ticket15109Spec
|
class Ticket15109SpecMultiJvmNode1 extends Ticket15109Spec
|
||||||
class Ticket15109SpecMultiJvmNode2 extends Ticket15109Spec
|
class Ticket15109SpecMultiJvmNode2 extends Ticket15109Spec
|
||||||
|
|
||||||
abstract class Ticket15109Spec extends MultiNodeRemotingSpec(Ticket15109Spec) {
|
abstract class Ticket15109Spec extends RemotingMultiNodeSpec(Ticket15109Spec) {
|
||||||
|
|
||||||
import Ticket15109Spec._
|
import Ticket15109Spec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import java.util.concurrent.locks.LockSupport
|
||||||
|
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
import akka.actor._
|
import akka.actor._
|
||||||
import akka.remote.MultiNodeRemotingSpec
|
import akka.remote.RemotingMultiNodeSpec
|
||||||
import akka.remote.testconductor.RoleName
|
import akka.remote.testconductor.RoleName
|
||||||
import akka.remote.testkit.MultiNodeConfig
|
import akka.remote.testkit.MultiNodeConfig
|
||||||
import akka.remote.testkit.MultiNodeSpec
|
import akka.remote.testkit.MultiNodeSpec
|
||||||
|
|
@ -53,7 +53,7 @@ object LatencySpec extends MultiNodeConfig {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
""")).withFallback(MultiNodeRemotingSpec.arteryFlightRecordingConf))
|
""")).withFallback(RemotingMultiNodeSpec.arteryFlightRecordingConf))
|
||||||
|
|
||||||
final case object Reset
|
final case object Reset
|
||||||
|
|
||||||
|
|
@ -161,7 +161,7 @@ class LatencySpecMultiJvmNode1 extends LatencySpec
|
||||||
class LatencySpecMultiJvmNode2 extends LatencySpec
|
class LatencySpecMultiJvmNode2 extends LatencySpec
|
||||||
|
|
||||||
abstract class LatencySpec
|
abstract class LatencySpec
|
||||||
extends MultiNodeRemotingSpec(LatencySpec) {
|
extends RemotingMultiNodeSpec(LatencySpec) {
|
||||||
|
|
||||||
import LatencySpec._
|
import LatencySpec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import java.util.concurrent.TimeUnit.NANOSECONDS
|
||||||
|
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
import akka.actor._
|
import akka.actor._
|
||||||
import akka.remote.{ MultiNodeRemotingSpec, RARP, RemoteActorRefProvider }
|
import akka.remote.{ RemotingMultiNodeSpec, RARP, RemoteActorRefProvider }
|
||||||
import akka.remote.testconductor.RoleName
|
import akka.remote.testconductor.RoleName
|
||||||
import akka.remote.testkit.MultiNodeConfig
|
import akka.remote.testkit.MultiNodeConfig
|
||||||
import akka.remote.testkit.MultiNodeSpec
|
import akka.remote.testkit.MultiNodeSpec
|
||||||
|
|
@ -67,7 +67,7 @@ object MaxThroughputSpec extends MultiNodeConfig {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
""")).withFallback(MultiNodeRemotingSpec.arteryFlightRecordingConf))
|
""")).withFallback(RemotingMultiNodeSpec.arteryFlightRecordingConf))
|
||||||
|
|
||||||
case object Run
|
case object Run
|
||||||
sealed trait Echo extends DeadLetterSuppression with JavaSerializable
|
sealed trait Echo extends DeadLetterSuppression with JavaSerializable
|
||||||
|
|
@ -277,7 +277,7 @@ object MaxThroughputSpec extends MultiNodeConfig {
|
||||||
class MaxThroughputSpecMultiJvmNode1 extends MaxThroughputSpec
|
class MaxThroughputSpecMultiJvmNode1 extends MaxThroughputSpec
|
||||||
class MaxThroughputSpecMultiJvmNode2 extends MaxThroughputSpec
|
class MaxThroughputSpecMultiJvmNode2 extends MaxThroughputSpec
|
||||||
|
|
||||||
abstract class MaxThroughputSpec extends MultiNodeRemotingSpec(MaxThroughputSpec) with PerfFlamesSupport {
|
abstract class MaxThroughputSpec extends RemotingMultiNodeSpec(MaxThroughputSpec) with PerfFlamesSupport {
|
||||||
|
|
||||||
import MaxThroughputSpec._
|
import MaxThroughputSpec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import akka.remote.testconductor.RoleName
|
||||||
import akka.actor.Identify
|
import akka.actor.Identify
|
||||||
|
|
||||||
import scala.concurrent.Await
|
import scala.concurrent.Await
|
||||||
import akka.remote.{ AddressUidExtension, MultiNodeRemotingSpec, RARP, ThisActorSystemQuarantinedEvent }
|
import akka.remote.{ AddressUidExtension, RemotingMultiNodeSpec, RARP, ThisActorSystemQuarantinedEvent }
|
||||||
|
|
||||||
object RemoteRestartedQuarantinedSpec extends MultiNodeConfig {
|
object RemoteRestartedQuarantinedSpec extends MultiNodeConfig {
|
||||||
val first = role("first")
|
val first = role("first")
|
||||||
|
|
@ -31,7 +31,7 @@ object RemoteRestartedQuarantinedSpec extends MultiNodeConfig {
|
||||||
akka.loglevel = WARNING
|
akka.loglevel = WARNING
|
||||||
akka.remote.log-remote-lifecycle-events = WARNING
|
akka.remote.log-remote-lifecycle-events = WARNING
|
||||||
akka.remote.artery.enabled = on
|
akka.remote.artery.enabled = on
|
||||||
""")).withFallback(MultiNodeRemotingSpec.arteryFlightRecordingConf))
|
""")).withFallback(RemotingMultiNodeSpec.arteryFlightRecordingConf))
|
||||||
|
|
||||||
class Subject extends Actor {
|
class Subject extends Actor {
|
||||||
def receive = {
|
def receive = {
|
||||||
|
|
@ -45,7 +45,7 @@ object RemoteRestartedQuarantinedSpec extends MultiNodeConfig {
|
||||||
class RemoteRestartedQuarantinedSpecMultiJvmNode1 extends RemoteRestartedQuarantinedSpec
|
class RemoteRestartedQuarantinedSpecMultiJvmNode1 extends RemoteRestartedQuarantinedSpec
|
||||||
class RemoteRestartedQuarantinedSpecMultiJvmNode2 extends RemoteRestartedQuarantinedSpec
|
class RemoteRestartedQuarantinedSpecMultiJvmNode2 extends RemoteRestartedQuarantinedSpec
|
||||||
|
|
||||||
abstract class RemoteRestartedQuarantinedSpec extends MultiNodeRemotingSpec(RemoteRestartedQuarantinedSpec) {
|
abstract class RemoteRestartedQuarantinedSpec extends RemotingMultiNodeSpec(RemoteRestartedQuarantinedSpec) {
|
||||||
|
|
||||||
import RemoteRestartedQuarantinedSpec._
|
import RemoteRestartedQuarantinedSpec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import scala.concurrent.duration._
|
||||||
import akka.actor._
|
import akka.actor._
|
||||||
import akka.actor.ActorIdentity
|
import akka.actor.ActorIdentity
|
||||||
import akka.actor.Identify
|
import akka.actor.Identify
|
||||||
import akka.remote.{ MultiNodeRemotingSpec, QuarantinedEvent, RARP }
|
import akka.remote.{ RemotingMultiNodeSpec, QuarantinedEvent, RARP }
|
||||||
import akka.remote.testconductor.RoleName
|
import akka.remote.testconductor.RoleName
|
||||||
import akka.remote.testkit.MultiNodeConfig
|
import akka.remote.testkit.MultiNodeConfig
|
||||||
import akka.remote.testkit.MultiNodeSpec
|
import akka.remote.testkit.MultiNodeSpec
|
||||||
|
|
@ -25,7 +25,7 @@ object SurviveNetworkPartitionSpec extends MultiNodeConfig {
|
||||||
akka.loglevel = INFO
|
akka.loglevel = INFO
|
||||||
akka.remote.artery.enabled = on
|
akka.remote.artery.enabled = on
|
||||||
akka.remote.artery.advanced.give-up-system-message-after = 4s
|
akka.remote.artery.advanced.give-up-system-message-after = 4s
|
||||||
""")).withFallback(MultiNodeRemotingSpec.arteryFlightRecordingConf))
|
""")).withFallback(RemotingMultiNodeSpec.arteryFlightRecordingConf))
|
||||||
|
|
||||||
testTransport(on = true)
|
testTransport(on = true)
|
||||||
}
|
}
|
||||||
|
|
@ -33,7 +33,7 @@ object SurviveNetworkPartitionSpec extends MultiNodeConfig {
|
||||||
class SurviveNetworkPartitionSpecMultiJvmNode1 extends SurviveNetworkPartitionSpec
|
class SurviveNetworkPartitionSpecMultiJvmNode1 extends SurviveNetworkPartitionSpec
|
||||||
class SurviveNetworkPartitionSpecMultiJvmNode2 extends SurviveNetworkPartitionSpec
|
class SurviveNetworkPartitionSpecMultiJvmNode2 extends SurviveNetworkPartitionSpec
|
||||||
|
|
||||||
abstract class SurviveNetworkPartitionSpec extends MultiNodeRemotingSpec(SurviveNetworkPartitionSpec) {
|
abstract class SurviveNetworkPartitionSpec extends RemotingMultiNodeSpec(SurviveNetworkPartitionSpec) {
|
||||||
|
|
||||||
import SurviveNetworkPartitionSpec._
|
import SurviveNetworkPartitionSpec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import akka.actor.ActorRef
|
||||||
import akka.actor.Address
|
import akka.actor.Address
|
||||||
import akka.actor.PoisonPill
|
import akka.actor.PoisonPill
|
||||||
import akka.actor.Props
|
import akka.actor.Props
|
||||||
import akka.remote.MultiNodeRemotingSpec
|
import akka.remote.RemotingMultiNodeSpec
|
||||||
import akka.remote.testkit.{ MultiNodeConfig, MultiNodeSpec, STMultiNodeSpec }
|
import akka.remote.testkit.{ MultiNodeConfig, MultiNodeSpec, STMultiNodeSpec }
|
||||||
import akka.routing.Broadcast
|
import akka.routing.Broadcast
|
||||||
import akka.routing.RandomPool
|
import akka.routing.RandomPool
|
||||||
|
|
@ -27,7 +27,7 @@ class RemoteRandomConfig(artery: Boolean) extends MultiNodeConfig {
|
||||||
commonConfig(debugConfig(on = false).withFallback(
|
commonConfig(debugConfig(on = false).withFallback(
|
||||||
ConfigFactory.parseString(s"""
|
ConfigFactory.parseString(s"""
|
||||||
akka.remote.artery.enabled = $artery
|
akka.remote.artery.enabled = $artery
|
||||||
""")).withFallback(MultiNodeRemotingSpec.arteryFlightRecordingConf))
|
""")).withFallback(RemotingMultiNodeSpec.arteryFlightRecordingConf))
|
||||||
|
|
||||||
deployOnAll("""
|
deployOnAll("""
|
||||||
/service-hello {
|
/service-hello {
|
||||||
|
|
@ -56,7 +56,7 @@ object RemoteRandomSpec {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class RemoteRandomSpec(multiNodeConfig: RemoteRandomConfig) extends MultiNodeRemotingSpec(multiNodeConfig)
|
class RemoteRandomSpec(multiNodeConfig: RemoteRandomConfig) extends RemotingMultiNodeSpec(multiNodeConfig)
|
||||||
with DefaultTimeout {
|
with DefaultTimeout {
|
||||||
import multiNodeConfig._
|
import multiNodeConfig._
|
||||||
import RemoteRandomSpec._
|
import RemoteRandomSpec._
|
||||||
|
|
|
||||||
|
|
@ -3,32 +3,19 @@
|
||||||
*/
|
*/
|
||||||
package akka.remote.routing
|
package akka.remote.routing
|
||||||
|
|
||||||
import language.postfixOps
|
import akka.actor.{Actor, ActorRef, Address, PoisonPill, Props}
|
||||||
import scala.collection.immutable
|
|
||||||
import akka.actor.Actor
|
|
||||||
import akka.actor.ActorRef
|
|
||||||
import akka.actor.Props
|
|
||||||
import akka.actor.PoisonPill
|
|
||||||
import akka.actor.Address
|
|
||||||
|
|
||||||
import scala.concurrent.Await
|
|
||||||
import akka.pattern.ask
|
import akka.pattern.ask
|
||||||
import akka.remote.MultiNodeRemotingSpec
|
import akka.remote.RemotingMultiNodeSpec
|
||||||
import akka.remote.testkit.{ MultiNodeConfig, MultiNodeSpec, STMultiNodeSpec }
|
import akka.remote.testkit.MultiNodeConfig
|
||||||
import akka.routing.Broadcast
|
import akka.routing._
|
||||||
import akka.routing.GetRoutees
|
|
||||||
import akka.routing.Routees
|
|
||||||
import akka.routing.RoundRobinPool
|
|
||||||
import akka.routing.RoundRobinGroup
|
|
||||||
import akka.routing.RoutedActorRef
|
|
||||||
import akka.routing.Resizer
|
|
||||||
import akka.routing.Routee
|
|
||||||
import akka.routing.FromConfig
|
|
||||||
import akka.testkit._
|
import akka.testkit._
|
||||||
|
|
||||||
import scala.concurrent.duration._
|
|
||||||
import com.typesafe.config.ConfigFactory
|
import com.typesafe.config.ConfigFactory
|
||||||
|
|
||||||
|
import scala.collection.immutable
|
||||||
|
import scala.concurrent.Await
|
||||||
|
import scala.concurrent.duration._
|
||||||
|
import scala.language.postfixOps
|
||||||
|
|
||||||
class RemoteRoundRobinConfig(artery: Boolean) extends MultiNodeConfig {
|
class RemoteRoundRobinConfig(artery: Boolean) extends MultiNodeConfig {
|
||||||
|
|
||||||
val first = role("first")
|
val first = role("first")
|
||||||
|
|
@ -39,7 +26,7 @@ class RemoteRoundRobinConfig(artery: Boolean) extends MultiNodeConfig {
|
||||||
commonConfig(debugConfig(on = false).withFallback(
|
commonConfig(debugConfig(on = false).withFallback(
|
||||||
ConfigFactory.parseString(s"""
|
ConfigFactory.parseString(s"""
|
||||||
akka.remote.artery.enabled = $artery
|
akka.remote.artery.enabled = $artery
|
||||||
""")).withFallback(MultiNodeRemotingSpec.arteryFlightRecordingConf))
|
""")).withFallback(RemotingMultiNodeSpec.arteryFlightRecordingConf))
|
||||||
|
|
||||||
deployOnAll("""
|
deployOnAll("""
|
||||||
/service-hello {
|
/service-hello {
|
||||||
|
|
@ -86,10 +73,10 @@ object RemoteRoundRobinSpec {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class RemoteRoundRobinSpec(multiNodeConfig: RemoteRoundRobinConfig) extends MultiNodeRemotingSpec(multiNodeConfig)
|
class RemoteRoundRobinSpec(multiNodeConfig: RemoteRoundRobinConfig) extends RemotingMultiNodeSpec(multiNodeConfig)
|
||||||
with DefaultTimeout {
|
with DefaultTimeout {
|
||||||
import multiNodeConfig._
|
|
||||||
import RemoteRoundRobinSpec._
|
import RemoteRoundRobinSpec._
|
||||||
|
import multiNodeConfig._
|
||||||
|
|
||||||
def initialParticipants = roles.size
|
def initialParticipants = roles.size
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import akka.actor.ActorRef
|
||||||
import akka.actor.Address
|
import akka.actor.Address
|
||||||
import akka.actor.PoisonPill
|
import akka.actor.PoisonPill
|
||||||
import akka.actor.Props
|
import akka.actor.Props
|
||||||
import akka.remote.MultiNodeRemotingSpec
|
import akka.remote.RemotingMultiNodeSpec
|
||||||
import akka.remote.testkit.{ MultiNodeConfig, MultiNodeSpec, STMultiNodeSpec }
|
import akka.remote.testkit.{ MultiNodeConfig, MultiNodeSpec, STMultiNodeSpec }
|
||||||
import akka.routing.Broadcast
|
import akka.routing.Broadcast
|
||||||
import akka.routing.ScatterGatherFirstCompletedPool
|
import akka.routing.ScatterGatherFirstCompletedPool
|
||||||
|
|
@ -28,7 +28,7 @@ class RemoteScatterGatherConfig(artery: Boolean) extends MultiNodeConfig {
|
||||||
commonConfig(debugConfig(on = false).withFallback(
|
commonConfig(debugConfig(on = false).withFallback(
|
||||||
ConfigFactory.parseString(s"""
|
ConfigFactory.parseString(s"""
|
||||||
akka.remote.artery.enabled = $artery
|
akka.remote.artery.enabled = $artery
|
||||||
""")).withFallback(MultiNodeRemotingSpec.arteryFlightRecordingConf))
|
""")).withFallback(RemotingMultiNodeSpec.arteryFlightRecordingConf))
|
||||||
|
|
||||||
deployOnAll("""
|
deployOnAll("""
|
||||||
/service-hello {
|
/service-hello {
|
||||||
|
|
@ -57,7 +57,7 @@ object RemoteScatterGatherSpec {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class RemoteScatterGatherSpec(multiNodeConfig: RemoteScatterGatherConfig) extends MultiNodeRemotingSpec(multiNodeConfig)
|
class RemoteScatterGatherSpec(multiNodeConfig: RemoteScatterGatherConfig) extends RemotingMultiNodeSpec(multiNodeConfig)
|
||||||
with DefaultTimeout {
|
with DefaultTimeout {
|
||||||
import multiNodeConfig._
|
import multiNodeConfig._
|
||||||
import RemoteScatterGatherSpec._
|
import RemoteScatterGatherSpec._
|
||||||
|
|
|
||||||
|
|
@ -15,12 +15,12 @@ import akka.testkit.LongRunningTest
|
||||||
import java.net.InetSocketAddress
|
import java.net.InetSocketAddress
|
||||||
import java.net.InetAddress
|
import java.net.InetAddress
|
||||||
|
|
||||||
import akka.remote.MultiNodeRemotingSpec
|
import akka.remote.RemotingMultiNodeSpec
|
||||||
import akka.remote.testkit.{ MultiNodeConfig, MultiNodeSpec, STMultiNodeSpec }
|
import akka.remote.testkit.{ MultiNodeConfig, MultiNodeSpec, STMultiNodeSpec }
|
||||||
import akka.remote.transport.ThrottlerTransportAdapter.Direction
|
import akka.remote.transport.ThrottlerTransportAdapter.Direction
|
||||||
|
|
||||||
object TestConductorMultiJvmSpec extends MultiNodeConfig {
|
object TestConductorMultiJvmSpec extends MultiNodeConfig {
|
||||||
commonConfig(debugConfig(on = false).withFallback(MultiNodeRemotingSpec.arteryFlightRecordingConf))
|
commonConfig(debugConfig(on = false).withFallback(RemotingMultiNodeSpec.arteryFlightRecordingConf))
|
||||||
|
|
||||||
val master = role("master")
|
val master = role("master")
|
||||||
val slave = role("slave")
|
val slave = role("slave")
|
||||||
|
|
@ -31,7 +31,7 @@ object TestConductorMultiJvmSpec extends MultiNodeConfig {
|
||||||
class TestConductorMultiJvmNode1 extends TestConductorSpec
|
class TestConductorMultiJvmNode1 extends TestConductorSpec
|
||||||
class TestConductorMultiJvmNode2 extends TestConductorSpec
|
class TestConductorMultiJvmNode2 extends TestConductorSpec
|
||||||
|
|
||||||
class TestConductorSpec extends MultiNodeRemotingSpec(TestConductorMultiJvmSpec) {
|
class TestConductorSpec extends RemotingMultiNodeSpec(TestConductorMultiJvmSpec) {
|
||||||
|
|
||||||
import TestConductorMultiJvmSpec._
|
import TestConductorMultiJvmSpec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,11 @@
|
||||||
*/
|
*/
|
||||||
package akka.remote.testkit
|
package akka.remote.testkit
|
||||||
|
|
||||||
import akka.remote.MultiNodeRemotingSpec
|
import akka.remote.RemotingMultiNodeSpec
|
||||||
import akka.testkit.LongRunningTest
|
import akka.testkit.LongRunningTest
|
||||||
|
|
||||||
object MultiNodeSpecMultiJvmSpec extends MultiNodeConfig {
|
object MultiNodeSpecMultiJvmSpec extends MultiNodeConfig {
|
||||||
commonConfig(debugConfig(on = false).withFallback(MultiNodeRemotingSpec.arteryFlightRecordingConf))
|
commonConfig(debugConfig(on = false).withFallback(RemotingMultiNodeSpec.arteryFlightRecordingConf))
|
||||||
|
|
||||||
val node1 = role("node1")
|
val node1 = role("node1")
|
||||||
val node2 = role("node2")
|
val node2 = role("node2")
|
||||||
|
|
@ -20,7 +20,7 @@ class MultiNodeSpecSpecMultiJvmNode2 extends MultiNodeSpecSpec
|
||||||
class MultiNodeSpecSpecMultiJvmNode3 extends MultiNodeSpecSpec
|
class MultiNodeSpecSpecMultiJvmNode3 extends MultiNodeSpecSpec
|
||||||
class MultiNodeSpecSpecMultiJvmNode4 extends MultiNodeSpecSpec
|
class MultiNodeSpecSpecMultiJvmNode4 extends MultiNodeSpecSpec
|
||||||
|
|
||||||
class MultiNodeSpecSpec extends MultiNodeRemotingSpec(MultiNodeSpecMultiJvmSpec) {
|
class MultiNodeSpecSpec extends RemotingMultiNodeSpec(MultiNodeSpecMultiJvmSpec) {
|
||||||
|
|
||||||
import MultiNodeSpecMultiJvmSpec._
|
import MultiNodeSpecMultiJvmSpec._
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,12 +7,13 @@ import java.io.File
|
||||||
import java.net.InetSocketAddress
|
import java.net.InetSocketAddress
|
||||||
import java.nio.channels.{ DatagramChannel, FileChannel }
|
import java.nio.channels.{ DatagramChannel, FileChannel }
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
|
import java.util.UUID
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import java.util.concurrent.atomic.{ AtomicLong, AtomicReference }
|
import java.util.concurrent.atomic.{ AtomicLong, AtomicReference }
|
||||||
import java.util.concurrent.atomic.AtomicBoolean
|
import java.util.concurrent.atomic.AtomicBoolean
|
||||||
|
|
||||||
import scala.annotation.tailrec
|
import scala.annotation.tailrec
|
||||||
import scala.concurrent.{ Await, Future, Promise }
|
import scala.concurrent.{ Await, ExecutionContext, Future, Promise }
|
||||||
import scala.concurrent.duration._
|
import scala.concurrent.duration._
|
||||||
import scala.util.Failure
|
import scala.util.Failure
|
||||||
import scala.util.Success
|
import scala.util.Success
|
||||||
|
|
@ -47,6 +48,7 @@ import akka.remote.transport.ThrottlerTransportAdapter.Blackhole
|
||||||
import akka.remote.transport.ThrottlerTransportAdapter.SetThrottle
|
import akka.remote.transport.ThrottlerTransportAdapter.SetThrottle
|
||||||
import akka.remote.transport.ThrottlerTransportAdapter.Unthrottled
|
import akka.remote.transport.ThrottlerTransportAdapter.Unthrottled
|
||||||
import akka.stream.AbruptTerminationException
|
import akka.stream.AbruptTerminationException
|
||||||
|
import akka.stream.ActorAttributes.Dispatcher
|
||||||
import akka.stream.ActorMaterializer
|
import akka.stream.ActorMaterializer
|
||||||
import akka.stream.KillSwitches
|
import akka.stream.KillSwitches
|
||||||
import akka.stream.Materializer
|
import akka.stream.Materializer
|
||||||
|
|
@ -58,11 +60,7 @@ import akka.stream.scaladsl.Sink
|
||||||
import akka.stream.scaladsl.Source
|
import akka.stream.scaladsl.Source
|
||||||
import akka.util.OptionVal
|
import akka.util.OptionVal
|
||||||
import akka.util.WildcardIndex
|
import akka.util.WildcardIndex
|
||||||
import io.aeron.Aeron
|
import io.aeron._
|
||||||
import io.aeron.AvailableImageHandler
|
|
||||||
import io.aeron.CncFileDescriptor
|
|
||||||
import io.aeron.Image
|
|
||||||
import io.aeron.UnavailableImageHandler
|
|
||||||
import io.aeron.driver.MediaDriver
|
import io.aeron.driver.MediaDriver
|
||||||
import io.aeron.driver.ThreadingMode
|
import io.aeron.driver.ThreadingMode
|
||||||
import io.aeron.exceptions.ConductorServiceTimeoutException
|
import io.aeron.exceptions.ConductorServiceTimeoutException
|
||||||
|
|
@ -381,6 +379,7 @@ private[remote] class ArteryTransport(_system: ExtendedActorSystem, _provider: R
|
||||||
override def settings = provider.remoteSettings.Artery
|
override def settings = provider.remoteSettings.Artery
|
||||||
|
|
||||||
override def start(): Unit = {
|
override def start(): Unit = {
|
||||||
|
Runtime.getRuntime.addShutdownHook(shutdownHook)
|
||||||
startMediaDriver()
|
startMediaDriver()
|
||||||
startAeron()
|
startAeron()
|
||||||
topLevelFREvents.loFreq(Transport_AeronStarted, NoMetaData)
|
topLevelFREvents.loFreq(Transport_AeronStarted, NoMetaData)
|
||||||
|
|
@ -428,8 +427,7 @@ private[remote] class ArteryTransport(_system: ExtendedActorSystem, _provider: R
|
||||||
private lazy val shutdownHook = new Thread {
|
private lazy val shutdownHook = new Thread {
|
||||||
override def run(): Unit = {
|
override def run(): Unit = {
|
||||||
if (!_shutdown) {
|
if (!_shutdown) {
|
||||||
internalShutdown()
|
Await.result(internalShutdown(), 20.seconds)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -437,8 +435,14 @@ private[remote] class ArteryTransport(_system: ExtendedActorSystem, _provider: R
|
||||||
private def startMediaDriver(): Unit = {
|
private def startMediaDriver(): Unit = {
|
||||||
if (settings.Advanced.EmbeddedMediaDriver) {
|
if (settings.Advanced.EmbeddedMediaDriver) {
|
||||||
val driverContext = new MediaDriver.Context
|
val driverContext = new MediaDriver.Context
|
||||||
if (settings.Advanced.AeronDirectoryName.nonEmpty)
|
if (settings.Advanced.AeronDirectoryName.nonEmpty) {
|
||||||
driverContext.aeronDirectoryName(settings.Advanced.AeronDirectoryName)
|
driverContext.aeronDirectoryName(settings.Advanced.AeronDirectoryName)
|
||||||
|
} else {
|
||||||
|
// create a random name but include the actor system name for easier debugging
|
||||||
|
val uniquePart = UUID.randomUUID().toString
|
||||||
|
val randomName = s"${CommonContext.AERON_DIR_PROP_DEFAULT}-${system.name}-$uniquePart"
|
||||||
|
driverContext.aeronDirectoryName(randomName)
|
||||||
|
}
|
||||||
driverContext.clientLivenessTimeoutNs(settings.Advanced.ClientLivenessTimeout.toNanos)
|
driverContext.clientLivenessTimeoutNs(settings.Advanced.ClientLivenessTimeout.toNanos)
|
||||||
driverContext.imageLivenessTimeoutNs(settings.Advanced.ImageLivenessTimeoutNs.toNanos)
|
driverContext.imageLivenessTimeoutNs(settings.Advanced.ImageLivenessTimeoutNs.toNanos)
|
||||||
driverContext.driverTimeoutMs(settings.Advanced.DriverTimeout.toMillis)
|
driverContext.driverTimeoutMs(settings.Advanced.DriverTimeout.toMillis)
|
||||||
|
|
@ -468,7 +472,6 @@ private[remote] class ArteryTransport(_system: ExtendedActorSystem, _provider: R
|
||||||
val driver = MediaDriver.launchEmbedded(driverContext)
|
val driver = MediaDriver.launchEmbedded(driverContext)
|
||||||
log.info("Started embedded media driver in directory [{}]", driver.aeronDirectoryName)
|
log.info("Started embedded media driver in directory [{}]", driver.aeronDirectoryName)
|
||||||
topLevelFREvents.loFreq(Transport_MediaDriverStarted, driver.aeronDirectoryName().getBytes("US-ASCII"))
|
topLevelFREvents.loFreq(Transport_MediaDriverStarted, driver.aeronDirectoryName().getBytes("US-ASCII"))
|
||||||
Runtime.getRuntime.addShutdownHook(shutdownHook)
|
|
||||||
if (!mediaDriver.compareAndSet(None, Some(driver))) {
|
if (!mediaDriver.compareAndSet(None, Some(driver))) {
|
||||||
throw new IllegalStateException("media driver started more than once")
|
throw new IllegalStateException("media driver started more than once")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -199,7 +199,7 @@ private[akka] final class FlightRecorderReader(fileChannel: FileChannel) {
|
||||||
case class RichEntry(timeStamp: Instant, dirty: Boolean, code: Long, metadata: Array[Byte]) {
|
case class RichEntry(timeStamp: Instant, dirty: Boolean, code: Long, metadata: Array[Byte]) {
|
||||||
override def toString: String = {
|
override def toString: String = {
|
||||||
val textualCode = FlightRecorderEvents.eventDictionary.getOrElse(code, "").take(34)
|
val textualCode = FlightRecorderEvents.eventDictionary.getOrElse(code, "").take(34)
|
||||||
val metadataString = new String(metadata, "UTF-8")
|
val metadataString = new String(metadata, "US-ASCII")
|
||||||
f"[$timeStamp] ${if (dirty) "#" else ""} $code%3s $textualCode%-34s | $metadataString"
|
f"[$timeStamp] ${if (dirty) "#" else ""} $code%3s $textualCode%-34s | $metadataString"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue