- re-label Client/Server to Inbound/Outbound for netty settings
description
- move to just using exactly one class loader for all reflective
activities of the ActorSystem, which is either the context class
loader or the one which loaded the ActorSystem’s class; document that
putting Akka on boot class path will not work
- be more careful with initializing the Client- and ServerBootstrap
- rename Port to DesiredPortFromConfig to discourage misuse
- write test for NettySettings
- various small fixes
- move all creation of ActorRefs into the ActorRefProvider (deadLetters,
locker)
- rootPath does not contain remote transport address any longer in order
to start the LocalActorRefProvider before the RemoteTransport; the
transport address is inserted during serialization only, which enables
us later to have more than one transport available for one actor
system (maybe even needed for clustering)
- fix inheritance between DeadLetterActorRef and EmptyLocalActorRef
- document some start-up dependencies by reordering constructor code
- fix remote tests which used self.path for identifying remote actors
(since that no longer includes the remote transport address)
- remove ?(msg, timeout), should always use ?(msg)(timeout) because of
Scala’s only Martin-acknowledged design flaw of being able to pass
tuples into single-arg methods without adding another pair of parens
- put a provider into all actor refs, because they all are created by
and associated with one
- treat all terminated refs equally: tell(msg) and return broken promise
- remove Remote, incorporate its few fields into RemoteActorRefProvider
- rename RemoteSupport to RemoteTransport to sync up with conf and
the way we talk about it
- remove LocalAddress/RemoteAddress etc. and just have a final case
class Address(protocol, system, host, port)
- split netty settings out or RemoteSettings into NettySettings
- split out from NettyRemoteSupport.scala: Server.scala, Client.scala,
Settings.scala
plus a few fixes, including using the contextClassLoader when loading
the provider for ActorSystemImpl
- move package objects into their respective package.scala file in the
right directories
- make implicit conversion as well as explicit facility available under
the same name akka.patterns.ask for easy import
- revert the logic to produce the Promise for the PromiseActorRef within
the ActorRefProvider; supporting wrapping of external Promises does
not seem to justify doing needless extra allocations in case of
failure
- add scaladocs
- factor out “def provider” into trait ActorRefWithProvider, as it
didn’t feel right attaching this information “by exception” to
MinimalActorRef
- introduce EmptyLocalActorRef, which is returned for unsuccessful
look-ups of local scope
- this fixes the problem that actors—after their death—can still be
looked up without losing their identity; otherwise behave like
DeadLetterActorRef
- adapt tests accordingly
- make DeathWatchSpec reusable and build remote test from it
- remove several unused imports of LocalActorRef
- use LocalRef/RemoteRef in pattern matches where applicable: these are
marker traits for a ref’s scope; InternalActorRef mandates a scope as
per its self-type
- mostly a matter of putting correct target.nodes URIs into configs and
adding withRouting to Props
- ScatterGather test was wrong to assume equal distribution of replies
from connections; it is random and only the sum should add up
- split out actual routing functionality into *Like traits to be
reusable
- make RemoteRouterConfig which only differs in how remote placement is
initiated
- teach RemoteDeployer how to convert local RouterConfig in case config
key “target.nodes” is set
- IT WORKS! All tests GREEN
- oh, yeah, had to make ActorPath serializable ...
- pull some more generic stuff out of the individual routers, add
factories which take only target lists
- add router parsing to Deployer, removing everything which is not
strictly related to local scope, which left only few things, so move
them to Deployer.scala and delete DeploymentConfig
- fix ConfiguredLocalRoutingSpec to use the new configuration mechanism
and verify that configuration overrides code
- fix DeployerSpec by using (mostly) correct lookup paths and removing
everything which was not local
- change config file layout, removing everything which is not local from
akka-actor/.../reference.conf, putting the remote stuff into the
akka-remote/.../reference.conf (unused as of yet); adapt comments
according to changed functionality
- fixed so that netty pipeline when generating addresses does not need
to know the system name of the connecting client (which might differ
from the local one, of course)
- this entailed differentiating between transport addresses and system
addresses, which I took as an opportunity to separate everything out
properly so that address schemas can easily be made pluggable
- made RemoteSupport generic in the address format it supports
- adapt netty stuff, and made everything else work with the most
generic: ParsedTransportAddress
- did I mention that I statically separated unparsed from parsed
addresses?
- remove unused ActorDeployer trait
- put everything in one class with simple initialization structure and
one protected method to override for adaptations
- adapt RemoteDeployer accordingly
- change “remote” key to directly contain the single remote address,
since there is nothing else to configure
- adapt test cases accordingly
- they still must start with “/” in the configuration file
- they will be looked up while deploying under /user and /remote, the
latter being necessary to support fully transparent deployment (i.e.
the path under /remote is shortened from the left to arrive at the
logical ancestor which is just a child of /user on some node)
- RemoteCommunicationSpec last test currently failing, lookup of
deployment must be fixed to work zig-zag across nodes
- commit mainly to merge with Henrik’s router work and get the surface
clean
- add supervisor to remote USE message
- make remoteDaemon a VirtualPathContainer like
LocalActorRefProvider.tempContainer (i.e. synchonous with CHM-based
child lookup), scrap remoteDaemonSupervisor and rename remoteDaemon to
“/remote” to match the plans in the docs
- comment out the remote deployment configuration section, to be done
when Henrik is finished with RoutedActorRef work
- for now only “remote.nodes = ["sys@host:port"]” is looked at, i.e. if
at least one is present, the first one is used to determine where to
deploy the currently created child (routers will do the scaling-out
component) [rest is commented out]
- multi-jvm tests not yet re-enabled (need to be adapted), but all other
tests are GREEN (at least on my machine)
- create RemoteActorRef in actorFor
- simplify send/receive because Futures/Exceptions do not go over the
wire anymore
- add RemoteCommunicationSpec which uses two ActorSystems communicating
in the same JVM via TCP socket
- moved RemoteInterface.scala into akka-remote, not needed anymore since
the plugin is loaded as ActorRefProvider now
- removed some old unused imports
- split out remote aspects from Deployer & DeployerSpec into
RemoteDeployer & RemoteDeployerSpec (the latter in akka-remote)
- created a ticket for cleaning up the rest, mostly remove all
occurrences of “remote” and “cluster” from akka-actor in this way
All of this was triggered by wanting to:
- change the signature of RemoteSupport.send to require a RemoteActorRef
recipient