This document lists key events published on Proto.Actor's EventStream and how they
coordinate behaviour between the Remote and Cluster modules.
For each event we show who publishes it, when it is raised, and which
components subscribe to it.
- Published by:
BlockListwhen new member IDs are added to the block list (e.g. unresponsive or leaving members) (src/Proto.Remote/BlockList.cs) - Subscribed by:
MemberListto log the block and recompute topology. If the local node is blocked it invokesSelfBlocked(src/Proto.Cluster/Membership/MemberList.cs)
- Published by:
ServerConnectorwhen a remote connection is refused or fails (src/Proto.Remote/Endpoints/ServerConnector.cs and src/Proto.Remote/Endpoints/ServerConnector.cs)RemotingGrpcServicewhen a channel closes (src/Proto.Remote/Endpoints/RemotingGrpcService.cs)MemberListwhen a cluster member leaves (src/Proto.Cluster/Membership/MemberList.cs)
- Subscribed by:
EndpointManagerwhich disposes the endpoint and optionally blocks the address or system ID (src/Proto.Remote/Endpoints/EndpointManager.cs and src/Proto.Remote/Endpoints/EndpointManager.cs)
- Published by:
MemberList.UpdateClusterTopologywhenever membership changes (join/leave/block) and broadcast to all members (src/Proto.Cluster/Membership/MemberList.cs and src/Proto.Cluster/Membership/MemberList.cs) - Subscribed by: many cluster components, for example:
Clusterremoves cached PIDs for members that left (src/Proto.Cluster/Cluster.cs)PartitionManagerupdates placement selectors and forwards the update to partition actors (src/Proto.Cluster/Partition/PartitionManager.cs)IdentityStorageLookupcleans storage for departing members (src/Proto.Cluster/Identity/IdentityStorageLookup.cs)
- Published by:
ClusterExtensionwhen a cluster-identity actor is stopping (src/Proto.Cluster/ClusterExtension.cs) - Subscribed by: placement/activation actors to remove local state and
broadcast termination:
PartitionActivatorActorsubscribes on start (src/Proto.Cluster/PartitionActivator/PartitionActivatorActor.cs)PartitionPlacementActorsubscribes and forwards the event to itself (src/Proto.Cluster/Partition/PartitionPlacementActor.cs)IdentityStoragePlacementActorsubscribes for clean-up (src/Proto.Cluster/Identity/IdentityStoragePlacementActor.cs)
- Published by: actors handling
ActivationTerminating; e.g.PartitionActivatorActorbroadcasts the termination to all nodes so caches can be cleared (src/Proto.Cluster/PartitionActivator/PartitionActivatorActor.cs) - Subscribed by: components maintaining activation indexes/caches, such as
PartitionIdentityActor, which removes the PID and clears the cache on receipt (src/Proto.Cluster/Partition/PartitionIdentityActor.cs and src/Proto.Cluster/Partition/PartitionIdentityActor.cs)
- Published by:
GossipActorfor each gossip state update received from a peer (src/Proto.Cluster/Gossip/GossipActor.cs) - Subscribed by:
MemberListto merge block lists learned via gossip (src/Proto.Cluster/Membership/MemberList.cs)GossipMemberStrategyto track member heartbeats and actor counts (src/Proto.Cluster/Membership/GossipMemberStrategy.cs)
- Published by: remote endpoints when a message cannot be delivered, either by the endpoint itself or when targeting a blocked address (src/Proto.Remote/Endpoints/Endpoint.cs, src/Proto.Remote/Endpoints/Endpoint.cs and src/Proto.Remote/Endpoints/BlockedEndpoint.cs)
- Subscribed by: optional diagnostics subscribers; no core cluster/remote component subscribes by default.
These events provide loose coupling between modules, allowing remote and cluster infrastructure to react to membership changes, connection failures, and activation lifecycle events.