=act don't initialize Serializer extension in RemoteActorRefProvider
Instead, load it as a library-extension.
This commit is contained in:
parent
9836dbbad1
commit
176bec52ae
4 changed files with 30 additions and 4 deletions
|
|
@ -99,6 +99,21 @@ class SerializationSetupSpec extends AkkaSpec(
|
||||||
serializer shouldBe theSameInstanceAs(programmaticDummySerializer)
|
serializer shouldBe theSameInstanceAs(programmaticDummySerializer)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"fail during ActorSystem creation when misconfigured" in {
|
||||||
|
val config =
|
||||||
|
ConfigFactory.parseString(
|
||||||
|
"""
|
||||||
|
akka.loglevel = OFF
|
||||||
|
akka.stdout-loglevel = OFF
|
||||||
|
akka.actor.serializers.doe = "john.is.not.here"
|
||||||
|
""").withFallback(ConfigFactory.load())
|
||||||
|
|
||||||
|
a[ClassNotFoundException] should be thrownBy {
|
||||||
|
val system = ActorSystem("SerializationSetupSpec-FailingSystem", config)
|
||||||
|
system.terminate()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is a weird edge case, someone creating a JavaSerializer manually and using it in a system means
|
// This is a weird edge case, someone creating a JavaSerializer manually and using it in a system means
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ akka {
|
||||||
#
|
#
|
||||||
# Should not be set by end user applications in 'application.conf', use the extensions property for that
|
# Should not be set by end user applications in 'application.conf', use the extensions property for that
|
||||||
#
|
#
|
||||||
library-extensions = ${?akka.library-extensions} []
|
library-extensions = ${?akka.library-extensions} ["akka.serialization.SerializationExtension"]
|
||||||
|
|
||||||
# List FQCN of extensions which shall be loaded at actor system startup.
|
# List FQCN of extensions which shall be loaded at actor system startup.
|
||||||
# Should be on the format: 'extensions = ["foo", "bar"]' etc.
|
# Should be on the format: 'extensions = ["foo", "bar"]' etc.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
# change to private[akka] class
|
||||||
|
ProblemFilters.exclude[DirectMissingMethodProblem]("akka.remote.RemoteActorRefProvider.serialization")
|
||||||
|
ProblemFilters.exclude[MissingTypesProblem]("akka.remote.RemoteActorRefProvider$Internals$")
|
||||||
|
ProblemFilters.exclude[DirectMissingMethodProblem]("akka.remote.RemoteActorRefProvider#Internals.apply")
|
||||||
|
ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.remote.RemoteActorRefProvider#Internals.copy$default$2")
|
||||||
|
ProblemFilters.exclude[DirectMissingMethodProblem]("akka.remote.RemoteActorRefProvider#Internals.serialization")
|
||||||
|
ProblemFilters.exclude[DirectMissingMethodProblem]("akka.remote.RemoteActorRefProvider#Internals.copy")
|
||||||
|
ProblemFilters.exclude[DirectMissingMethodProblem]("akka.remote.RemoteActorRefProvider#Internals.copy$default$3")
|
||||||
|
ProblemFilters.exclude[DirectMissingMethodProblem]("akka.remote.RemoteActorRefProvider#Internals.this")
|
||||||
|
|
@ -11,11 +11,14 @@ import akka.event.{ EventStream, Logging, LoggingAdapter }
|
||||||
import akka.event.Logging.Error
|
import akka.event.Logging.Error
|
||||||
import akka.serialization.{ Serialization, SerializationExtension }
|
import akka.serialization.{ Serialization, SerializationExtension }
|
||||||
import akka.pattern.pipe
|
import akka.pattern.pipe
|
||||||
|
|
||||||
import scala.util.control.NonFatal
|
import scala.util.control.NonFatal
|
||||||
import akka.actor.SystemGuardian.{ RegisterTerminationHook, TerminationHook, TerminationHookDone }
|
import akka.actor.SystemGuardian.{ RegisterTerminationHook, TerminationHook, TerminationHookDone }
|
||||||
|
|
||||||
import scala.util.control.Exception.Catcher
|
import scala.util.control.Exception.Catcher
|
||||||
import scala.concurrent.Future
|
import scala.concurrent.Future
|
||||||
import akka.ConfigurationException
|
import akka.ConfigurationException
|
||||||
|
import akka.annotation.InternalApi
|
||||||
import akka.dispatch.{ RequiresMessageQueue, UnboundedMessageQueueSemantics }
|
import akka.dispatch.{ RequiresMessageQueue, UnboundedMessageQueueSemantics }
|
||||||
import akka.remote.artery.ArteryTransport
|
import akka.remote.artery.ArteryTransport
|
||||||
import akka.util.OptionVal
|
import akka.util.OptionVal
|
||||||
|
|
@ -27,8 +30,9 @@ import akka.remote.serialization.ActorRefResolveThreadLocalCache
|
||||||
/**
|
/**
|
||||||
* INTERNAL API
|
* INTERNAL API
|
||||||
*/
|
*/
|
||||||
|
@InternalApi
|
||||||
private[akka] object RemoteActorRefProvider {
|
private[akka] object RemoteActorRefProvider {
|
||||||
private final case class Internals(transport: RemoteTransport, serialization: Serialization, remoteDaemon: InternalActorRef)
|
private final case class Internals(transport: RemoteTransport, remoteDaemon: InternalActorRef)
|
||||||
extends NoSerializationVerificationNeeded
|
extends NoSerializationVerificationNeeded
|
||||||
|
|
||||||
sealed trait TerminatorState
|
sealed trait TerminatorState
|
||||||
|
|
@ -166,7 +170,6 @@ private[akka] class RemoteActorRefProvider(
|
||||||
@volatile private var _internals: Internals = _
|
@volatile private var _internals: Internals = _
|
||||||
|
|
||||||
def transport: RemoteTransport = _internals.transport
|
def transport: RemoteTransport = _internals.transport
|
||||||
def serialization: Serialization = _internals.serialization
|
|
||||||
def remoteDaemon: InternalActorRef = _internals.remoteDaemon
|
def remoteDaemon: InternalActorRef = _internals.remoteDaemon
|
||||||
|
|
||||||
// This actor ensures the ordering of shutdown between remoteDaemon and the transport
|
// This actor ensures the ordering of shutdown between remoteDaemon and the transport
|
||||||
|
|
@ -200,7 +203,6 @@ private[akka] class RemoteActorRefProvider(
|
||||||
local.registerExtraNames(Map(("remote", d)))
|
local.registerExtraNames(Map(("remote", d)))
|
||||||
d
|
d
|
||||||
},
|
},
|
||||||
serialization = SerializationExtension(system),
|
|
||||||
transport = if (remoteSettings.Artery.Enabled) new ArteryTransport(system, this) else new Remoting(system, this))
|
transport = if (remoteSettings.Artery.Enabled) new ArteryTransport(system, this) else new Remoting(system, this))
|
||||||
|
|
||||||
_internals = internals
|
_internals = internals
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue