New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Typed cluster / remote receptionist #23634

jrudolph opened this Issue Sep 13, 2017 · 0 comments


None yet
2 participants

jrudolph commented Sep 13, 2017

We need a typed replacement for ActorSelection (which is seen as an anti-pattern). The idea is to provide a remote "receptionist", a service registry, where parties can get to know of services in the cluster.


  • a service is tagged by a typed ServiceKey
  • a service provider registers with its local receptionist (which can be an extension)
  • receptionists distribute registrations in the cluster using distributed-data (using the untyped API for now)
  • service users can either ask once or in a subscription for providers using the shared typed ServiceKey

@jrudolph jrudolph self-assigned this Sep 13, 2017

patriknw added a commit that referenced this issue Sep 22, 2017

=type Cluster and local Receptionist, #23634
* a Receptionists extension

It's basically an improved copy of the former receptionist pattern which is
removed here as well.

* Cluster implementation using Distributed Data

* =typ make ActorRef.apply work for adapted actor systems

@patriknw patriknw added this to the 2.5.5 milestone Sep 22, 2017

@patriknw patriknw closed this Sep 22, 2017

thanhphu added a commit to thanhphu/akka that referenced this issue Sep 26, 2017

Update fork (#1)
* Docs for multi-DC features

* =clu #23286 filter emitted reachability event by DC

* Update the link to Javaslang (#23316)

Javaslang has been renamed to Vavr.
The old link is no longer available.

* Update to (#23317)

Grammar fixes

* Improve Java pubsub example

`Put` does not result in a `SubscribeAck`

* Merging did not prune vector clocks for tombstoned nodes #23318

* =pro,str Upgrade to Reactive Streams 1.0.1, unlocks #20241

* Merge akka-docs/paradox/scala/stream/ and java/ (#23134)

* merge content of (#23206)

* Link and (#23331)

* Remove deprecated ActorDSL section from docs (#23330)

* Fix link to the actor lifecycle (#23300)

* Fix documentation for Unzip class (#23333) (#23334)

* Prune version clocks based on merged tombstones when merging  #23318

* Merge java and scala versions of (#23332)

* Merge java and scala versions of

* Replace with a symlink

* Fix typos

* Renamed/moved the self data center setting #23312 (#23344)

* DC reachability events #23245

* Fix link in OptionVal doc (#23346)

* =str upgrade streams TCK to 1.0.1-RC2 (#23343)

* #23118 Fail SourceQueue completion future in postStop

* Fix formatting mistake in akka-cluster docs (#23348)

* Getting Started tutorial improvements (#23210)

* =clu,dc #23340 additional test to see a node take over monitoring of remote DC (#23342)

* Streams QuickStart title (#23356)

* =clu,dc #23354 do not heartbeat to yourself (cross-dc)

* Being consistent on explanation of actor incarnations (Fixes #23035) (#23186)

* Update (#23366)

Correct the grammar.

* fix small issue (#23363)

* Elminate race in MultiDcHeartbeatTakingOverSpec #23371 (#23373)

* rephrase section on persistence a bit (#23364)

* Add streams cookbook to java docs again (#23379)

* Include imports in the GraphStage logging snippets (#23378)

* Optimizations and correctness fixes to the AffinityPool
* Reimplementation of ImmutableIntMap for much faster performance
* Benchmark for ImmutableIntMap added to akka-bench-jmh
* Many small performance improvements to the impl of AffinityPool
* Correctness fixes for pool lifecycle management

* Reencoding idle tracking to take place withing the AffinityPool's IdleStrategy

* Restart Flow/Source/Sink #19950

* fix comments for maxParkNanos and spinning

* add zero-copy constructor to create ByteString from external array

* give a more comprehensive doc

* =doc consolidate content of (#23052)

* =doc replace java version with a link - (#23052)

* Merge scala & java content for docs (#23052) (#23407)

* Fix reference to Hitch-Hiker's Guide (#23410)

* Add some logging to track down #20180

* =doc fixed broken link to CompletableFuture (#23412)

* fix #23416 instantiate exceptions at right time

* Merge paradox/scala/ and java/ (#23397)

* Fix glued Scala/Java code snippet tabs (Fixes #23415) (#23420)

* fix small issue (#23428)

* remove references to persistent views (#23426)

* Fixed typos and broken code snippet (#23423)

- Removed unnecessary @ symbols for Scala/Java.
- Inserted space between code snippets to fix broke tabs

* Small typo (#23419)

* +slf #23409 support org.slf4j.Marker

* Docs: Improve `TwitterStreamQuickstartDocSpec` fiddle code (#23411)

* Hashtags should not contain any special character
* Leverage `Set[Hashtag]` to remove duplicates across different tweets
* Add clarifying comments

* Removed TOC (#23425)

- Removed TOC as it is inconsistent with the rest of the documentation and duplicates the side menu

* Merge scala & java content for docs (#23052)  (#23422)

* Annotated extendable cluster tool actors with DoNotInherit (#23335)

* fix typo (#23434)

* Fix #23165: Update StreamConverters.fromInputStream docs to reflect reality

* =act #23437 wake up SelectionHandler every 10 seconds to prune stale selection keys

* Stream supervision doc clarification #23376

* Docs: Akka Persistence: Better intro for snapshots (#23430)

* Cleaned up the comments and fixed typo (#23418)

* Docs: Persistence: Fix note about sharding and snapshots (#23444)

* =str add Input/OutputStream mapMaterialized value warning in doc (#23424)

* Fix broken link. (#23447)

* Docs: Persistence: Fix Layout Issue (#23446)

* Load MiMa filters from file (#23083)

* Update regarding MiMa issue filters (#23448)

* Persistence: Reference.conf : remove refs to persistent view (#23451)

* Typed test kit improvements #23360

* Call right overloaded super method in spawn and spawnAnonymous (avoiding infinite recursion)
* Add Effects for each type of Spawning

* =str update reference FlowMaterializer to ActorMaterializer (#23457)

* =doc Akka Persistence: sbt/Maven instead of Scala/Java (#23450)

* distributed data is on by default

* clarify paragraph

* add missing space

* make sentence shorter

* fix grammar

* sbt instead of Scala and Maven instead of Java

* add gradle

* substitute scala akka versions

* fix TCK section

* fix version

* =doc clarify there is no language specific dependency

* Merge content of stream (#23455)

* =act #23458 cross link Patterns java APIs (#23459)

* =build Fixing sbt deprecation warning (#23454)

warning: `<<=` operator is deprecated. Use `key := { x.value }`

* Fix #23385, Update ExtendedActorMaterializer doc (#23431)

* ImmutableIntMap optimizations

* Fix docs typo (#23474)

* =slf show how one would use mdc and a marker in slf4j

* Docs: Cluster Usage (#23479)

* distributed data is on by default

* clarify paragraph

* add missing space

* make sentence shorter

* fix grammar

* akka cluster docs: add gradle, rename java / scala to maven / sbt

* =doc fix issue with Graceful Stop (#23478)

* distributed data is on by default

* clarify paragraph

* add missing space

* make sentence shorter

* fix grammar

* fix issue with graceful stop

* throw during deserialization (#22821)

* throw during deserialization

* formatting fix

* add annotation to all fromBinary methods

* remove annotation

* add annotation to remaining methods in Serialization.scala

* Rename addr to address in non-public API  #21874

* =str #23398 groupedWeightedWithin zero cost bugfix (#23399)

* added a failing test to demonstrate a bug in groupedWeightedWithin with zero cost function

* fixed the bug by adding a flag indicating if there are elements in buffer, and using it instead of totalWeight in case onTimer is called

* harden RemoteRestartedQuarantinedSpec, #17314

* Seems like the initial message may be dropped in this case,
  we are at-most once after all. See detailed logs in issue.

* =typ toTyped always returning the same adapter #23405 (#23441)

* Upgrade camel-core dependency to 2.17.7

Upgrade camel-core dependency to a version that fixes CVE-2017-5643.
The 2.17 branch is also currently a supported version of Camel, which
2.13 is not.

* security announcement CVE-2017-5643

* disclaimer about security vs binary compatibility

* Correct location of implicits in comment #23492

* Replace ClusterRouterGroup/Pool "use-role" with "use-role-set" #23496

* +doc more details on support in ask (#23463)

* Add PartitonHub, #21880

* FixedSizePartitionHub in Artery
* expose consumer queue size

* Replay all events if snapshot is unhandled #23469

* Update to Reactive Streams 1.0.1

* Better use of Artery lanes for ActorSelection, #23150

* Looked into the alternativies described in the ticket, but
  they were complicated so ended up with simply including the
  uid of the sending system in the hash for selecting inbound
  lane. That should be good enough, until we have any real demand
  for something else.
* This means that different lanes can be used ActorSelection messages
  from different sending systems, i.e. good in a cluster, but same lane
  will be used for all messages originating from the same system.
* Added possibility to run the benchmarks with ActorSelection
* Added ActorSelection to the send consistency test

* Modularizes the queue-selector in AffinityPool

* fix link labels in migration guide (#23491)

* =doc Fix wrong scala/java snippet directives #23513

Issue: #23513
Fix inline snippet in stream-io
Fix wrong rendering on other pages

* fix duplicated FlightRecorder event 91, #23323

* I don't think the FlightRecorder is in much use yet so don't care about compatibility
  of reading old logs

* Updated codahale metrics dependencies to 3.2.4 #17515

* =doc Transform broken link to ActorNotFound to inline code #23517

Refs: #23517
Broken link by mistake, should just be the class name surrounded by backticks

* fix NodeChurnSpec tombstones, #23369

* the gossip was growing because we introduced tombstones
* in this test it should be safe to have a short removal period
  of the tombstones

* Update

typo "temperaturs", fixed to "temperatures"

* Document rolling upgrades of clusters using ddata (#23372)

* Merge paradox/scala/ and java/ (#23456)

* Merged the document from java/stream/index and scala/strea/index (#23539)

* Add alsoTo to stages (#23537)

* removing ThreadLocalRandom import (#23540)

* Update configuration to exclude akka-bench-jmh from whitesource (#23542)

* Update configuration to exclude akka-bench-jmh from whitesource

Because we don't distribute that project

* Whitesource 'product' is always 'Lightbend Reactive Platform' again

* Ignore all unpublished subprojects from whitesource

* =art #23504 Keep more old decompression tables (3)

* Docs: Persistence - add configuration example for eager init. of plugins (#23545)

* Fix docs typo (#23548)

* +str fix for "fail offer future when stream is completed" QueueSource/SinkSpec

* =clt #23215 fail with nicer message if PubSubMediator gets null message (#23216)

* =clt #23215 fail with nicer message if PubSubMediator gets null message

* Update DistributedPubSubMediator.scala

* Update (#23550)

`repliesSoFar` is implied here, not `answersSoFar` which is never used in tutorial

* =str add latch to ManualProbe to popagate events only when subscription is done (#23365)

* Don't use WeaklyUp immediately, #23554

* see description in issue

* Data center reachability in cluster state (#23359)

* Manual case-declassing of CurrentClusterState #23347

* Unreachable data centers set in CurrentClusterState #23347

* avoid unique actor name issue in EndToEndEventAdapterSpec, #23483 (#23520)

* the name of the actor is of no importance

* Missing become after CurrentClusterState in CrossDcHeartbeatSender, #23371

* and a few other small things
* one can see in the failed test log that there is no ACTIVE log line on the failing node

* DeadLetterSuppression for Replicator.UpdateSuccess in distributed data #23553

* Connect the dots for cross-dc reachability, #23377

* the crossDcFailureDetector was not connected to the reachability table
* additional test by listen for {Reachable/Unreachable}DataCenter events in split spec
* missing Java API for getUnreachableDataCenters in CurrentClusterState

* clarify sender of throttle example, #23485

* and use noSender in ActorRefSinkActor

* Fixed a typo in a generic type declaration in tutorial (#23559)

* #23484 Guard against double pull (#23560)

* Fix wrong link of "Handling blocking operations in Akka HTTP" in Dispatchers page. (#23571)

* renamed the whitesource stable product name

* increase timeout in MultiDcSplitBrainSpec

* due to handshake timeout

reduce handshake timeout

fourth might generate UnreachableDataCenter in unsplit


* remove mima changes to avoid merge conflict

* add mima filters

* fix snip of ClusterShardingTest, moved

* =str failed: FlowSplitWhenSpec (#23278)

* Consistently spell Maven and Gradle with uppercase (#23569)

* Mark all the around hooks as internal in the api docs (#23587)

* use right youngest when moving to Up, #23582

* also confirm TakeOverFromMe when singleton already in oldest state

* Add customized NPE for null actor system (#23580)

* Add customized NPE for null actor system

* "system must not be null!"

* Add parentheses to startCoroner method call (#23599)

because we call it because of its side-effects

* Issue #23588 Typo in Scala version of Stream Composition

* Update whitesource plugin (and MiMa)

Update of MiMa was needed because of

* add more gradle deps

* Remoting for Akka Typed, #21225

* seems like it will just work when using the adapters, since
  it will simply delegate to the untyped RemoteActorRef
* ActorRefResolver was added for upporting erialization of typed ActorRef
* The ActorRef itself is not serializable with Java serialization,
  and we shouldn't do that

* Materialized value injected per materialization #23577

* =str #22881 test also resume case for throwing mid-stream mapAsync (#22915)

* =str #22880 fix mapAsync racy failure handling

* =str #22881 test also resume case for throwing mid-stream mapAsync

* address review feedback, the handle calls must be exactly like that

* =str #23536 Complete and fail ByteStringParser eagerly (#23594)

* Complete and fail ByteStringParser eagerly #23536

* Check that the buffer is empty first

* =doc Some documentation fixes (#23616)

* fixes some small issues with the documentation

* add syntax highlighting to jvm multi testing code in docs

* Add timeout to abort joining of seed nodes, #23502

* +str #23392 AbstractGraphStageWithMaterializedValue for Java users (#23394)

(no need to use Tuple2, can be Pair)

* =doc #23487 add missing scala snippet in testing doc (#23488)

* =doc #23487 add missing scala snippet in testing doc

* Update TestkitDocSpec.scala

* me file

* Update

* new actor benchmark (#23489)

* and array based mailbox in bench project

* =pro Update dependencies and plugins to latest. (#23591)

* =tes #23528 Hand out temporary loopback addresses from a larger pool (#23530)

* Hand out temporary loopback addresses from a larger pool

Might have prevented akka#23528

* Detect if binding on other loopback addresses works

Works for Linux, not for OSX

* Avoid hard-coding 'localhost' in more places

When the address is ignored and only a port is requested,
find a free port on 'localhost'

* =tes Update documentation for testkit fishForSpecificMessage #23608 (#23609)

* test Scala version in a Scala 2.13 friendly manner (#23620)

for the Scala 2.13 community build

* =doc,release Baptising the release server (#23606)

* Baptising the release server

* Update release (#23624)

* =rem Relax Aeron CNC version check but log a warning. (#23572)

* =str 21732 rewrite file souce with NIO and GraphStagу

add MiMa excludes and additional test

add benchmark and move eclusions to 2.5.4

add future completion on stream termination

* More consistency between UniformFanInShape and UniformFanOutShape (#23321)

* add+use UniformFanOutShape#outSeq for consistency

UniformFanInShape has inSeq, whereas UniformFanOutShape has outArray.
There's probably no good reason for this discrepancy.

* 2.5.3 is gold, deprecation would start in 2.5.4

* specialize in/outlets where possible

* review comments, binary compatibility

* optimize imports

* use Array copy internally

* give FanInShape1N the deprecation treatment

also, s/T\d/I\d/g

* delete ignored file

* process additional review comments

* make inArray fully private everywhere

* add benchmark heavy on the use of

* benchmark says: do not use Array for most n

* add JavaDoc to un-final'ed defs to not override

* change deprecated val to def; do not use it

* process patriknw's review comments

* =doc Make ActorSystem name in tutorial_1 consistent with documentation (#23629) (#23635)

* fix typo (#23630)

* deprecate Source.combine instance method #22452

* Further stream shape cleanups (#23633)

* =str move non-boilerplaty shapes out of templates

This will improve code navigation for those classes.

 - FanInShape, FanInShape1N, UniformFanInShape
 - FanOutShape, UniformFanOutShape

* =str deprecate FanInShape1N

It was not tested, used or documented anywhere. With one input of type T0,
n inputs of type T1 and one output of type O, it is also arguably not
particularly generic to warrant its inclusion.

* !str remove unnecessary copyFromPorts implementation in Fan{In,Out}Shape

Strictly speaking this is a binary incompatible change. It would only affect
users that explicitly called `copyFromPorts` (but for what reason?).

* =str #23636 fix deprecation message not to use backticks

Backticks break genjavadoc / unidoc.

Fixes #23636.

* Nicer way to determine `snip.akka.base_dir` (#23648)

Making it consistent with akka-http

* Disable min-nr-of-members for ClusterSingletonProxySpec #23619, #23627

* Add AbstractPersistentActorWithTimers, #23652 (#23653)

* =str hide deprecated lazy vals behind def in FanInShape et al (#23655)

To avoid genjavadoc issue lightbend/genjavadoc#85.

* =act small compilation fixes for JDK9 (#23658)

* Disambiguate 'position' and 'limit' calls (#23659)

* First test for Akka Typed remoting, #21225

* Fixed a typo in a toc in the guide (#23660)

* WIP ddata api for Akka Typed

* first stab at javadsl for Typed ddata

* Subscribe

* incorporate feedback

* add remaining commands

* convenience for ask

* DistributedData extension

* =jdk9,str JDK9 ready classes, in special directories (#23650)

* =jdk9,str JDK9 ready classes, in special directories

* =str,jdk9 prepare for releasing using JDK9 (needs sbt 1.0+ though)

* =str,jdk9 passing TCK spec touching some JDK9 types internally

* make sure to include linting options

* Avoid side effect in ActorGraphInterpreter#toString #23656

* =doc Remove duplicated 'to be's. issue #23646 (#23671)

* Add Code of Conduct, inspired by Play Framework's (#23673)

* Add Code of Conduct, inspired by Play framework's

* Update

* Update

* We also invite people not from companies

* cluster apis for typed, #21226

* Cluster management (join, leave, etc)
* Cluster membership subscriptions (MemberUp, MemberRemoved, etc)
* New SelfUp and SelfRemoved events
* change signature of awaitAssert to return the value (not binary compatible)
* Cluster singleton api

* Add onSignal behavior factory to Akka Typed DSL (closes #23640)

* =type Cluster and local Receptionist, #23634

* a Receptionists extension

It's basically an improved copy of the former receptionist pattern which is
removed here as well.

* Cluster implementation using Distributed Data

* =typ make ActorRef.apply work for adapted actor systems

* Some experiments with a typed api for persistence

* Expand example with a timer
* Move 'onRecoveryComplete' to 'builder' style
* rather than using a default parameter which is hard to
  evolve with binary compatibility
* Explicit snapshots
* Example spawning a child actor
* Taking a snapshot needs access to the state
* Added signal handler
* I like how simple the types of `commandHandler` and
 `signalHandler` are now, but it'd be nice if they were closer together and could perhaps even share the `state` switch. I'll give that a try.
* Attempt to get signal handling closer to command handling
* Always use the full state for snapshots
* If you want to add a mapping layer use event adapters or a custom
* Example of an actor that separates 'persistent' and transient state
* Use ordering 'command, event, state, context' consistently
* Allow multiple `andThen`
* Replace ask with spawned adapters
* Allow 'andThen' on each PersistentEffect
* Make 'onSignal' a partial function
* Remove unnecessary parens
* Simplify 'andThen', make sure it receives the State

* first impl of Typed PersistentActor, #22273

* illustrate problem with wrapping behavior

* Move ApiTest to PersistentActorCompileOnlyTest

* impl and test of signals

* Chaining side effects (callbacks and stopping)

Cleans up the API in a couple of places, but still needs type parameters
in spots where I wouldn't want to need them...

Allow multiple side effects in one 'andThen'

Making type inference actually work

Allow applying multiple side effects

In a way that allows 'inspecting' the effects if you want to, but
doesn't require you to repeat generic parameters when you don't.

* Some additional api adjustments, #22273

* rename PersistentEffect to Effect
* change order of parameters, ctx first
* rename onEvent to applyEvent
* persistenceIdFromActorName for Cluster Sharding
* PersistenActor.immutable

* Add 'def andThen(callback: ⇒ Unit)'

Cleans up the examples a bit, though it might make it easier to accidentally
look at the old state rather than the updated state.

* Typed actorref serializer to allow for java serialization of messages (#23696)

* typed actorref serializer to allow for java serialization of messages

* review adressed

* Typed library-extensions were loading the wrong thing (#23701)

* Typed library-extensions were loading the wrong thing

* And that actual fix...

* Formatting

* provided cluster dependencies in Akka Typed

* and some additional cleanup
* on my mac upd doesn't work unless loopback address is used

* =typ,clu akka typed cluster sharding, #23698

* EntityTypeKey in typed Cluster Sharding, #23690

* Add more doc for framing on tcp streaming #23325

* Fix minor docs typo (#23709)

* =doc Fix multi jvm sample link

* Make sending messages to dead letters by DistributedPubSubMediator configurable. #23462 (#23615)

* enforce same DC for isOlderThan, #23307 (#23625)

* fix issue with vvector handling in ORSet.mergeRemoveDelta #22890

* Java 9 Unsafe access to String value type mismatch. (#23710)

It needs to account for both Java 8 and 9 where the types are char[] and byte[] respectively.

* Keep the refuseUid in a better way, #22156

* The scenario described in the issue can cause the quarantine marker to
  be lost when creating a new endpoint for that address. Then when later
  creating another endpoint from an inbound connection the uid is considered
  confirmed and Ack message is accepted, triggering the unexpected seq number
* The refuseUid was kept in the endpoint policy markers, but that is just very
  complicated and as illustrated by this issue not always safe.
* Instead, keep the refuseUid separately so it's not lost when registering
  new endpoint.
* The purpose of WasGated was only to try to keep the refuseUid (as far as I know),
  and that is not needed any longer.

mima filter

* Add parameter eagerClose to Flow.interleave #22710 (#23718)

* overloaded methods added for binary compatibility
* Doc improve: remove unnecessary example, reword eagerClose description
* Test eagerClose = true when other stream closed

* New implementation of expectNoMsg in TestKit #23224

* Verify removal and add of new node incarnation in multi-dc, #23585

* MemberRemoved must be published before MemberUp, e.g. when restarted
  in other DC
* remove from failureDetector when receiving gossip with new member,
  not only new joining member

* increase timeout in MultiDcSingletonManagerSpec

lucianenache pushed a commit to lucianenache/akka that referenced this issue Nov 9, 2017

=type Cluster and local Receptionist, akka#23634
* a Receptionists extension

It's basically an improved copy of the former receptionist pattern which is
removed here as well.

* Cluster implementation using Distributed Data

* =typ make ActorRef.apply work for adapted actor systems
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment