Remove ClusterEventBus and system.eventStream, see #2202
This commit is contained in:
parent
e38dd80f38
commit
bc4d8fc7c5
3 changed files with 14 additions and 41 deletions
|
|
@ -103,8 +103,6 @@ class Cluster(system: ExtendedActorSystem, val failureDetector: FailureDetector)
|
||||||
@volatile
|
@volatile
|
||||||
private[cluster] var _latestStats = ClusterStats()
|
private[cluster] var _latestStats = ClusterStats()
|
||||||
|
|
||||||
private[cluster] val eventBus: ClusterEventBus = new ClusterEventBus
|
|
||||||
|
|
||||||
// ========================================================
|
// ========================================================
|
||||||
// ===================== WORK DAEMONS =====================
|
// ===================== WORK DAEMONS =====================
|
||||||
// ========================================================
|
// ========================================================
|
||||||
|
|
@ -167,7 +165,7 @@ class Cluster(system: ExtendedActorSystem, val failureDetector: FailureDetector)
|
||||||
}
|
}
|
||||||
}).withDispatcher(UseDispatcher), name = "clusterEventBusListener")
|
}).withDispatcher(UseDispatcher), name = "clusterEventBusListener")
|
||||||
|
|
||||||
eventBus.subscribe(listener, classOf[ClusterDomainEvent])
|
subscribe(listener, classOf[ClusterDomainEvent])
|
||||||
listener
|
listener
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -261,7 +259,12 @@ class Cluster(system: ExtendedActorSystem, val failureDetector: FailureDetector)
|
||||||
* The `to` Class can be [[akka.cluster.ClusterEvent.ClusterDomainEvent]]
|
* The `to` Class can be [[akka.cluster.ClusterEvent.ClusterDomainEvent]]
|
||||||
* or subclass.
|
* or subclass.
|
||||||
*/
|
*/
|
||||||
def subscribe(subscriber: ActorRef, to: Class[_]): Unit = eventBus.subscribe(subscriber, to)
|
def subscribe(subscriber: ActorRef, to: Class[_]): Unit = system.eventStream.subscribe(subscriber, to)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subscribe to cluster domain events.
|
||||||
|
*/
|
||||||
|
def unsubscribe(subscriber: ActorRef): Unit = system.eventStream.unsubscribe(subscriber)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Try to join this cluster node with the node specified by 'address'.
|
* Try to join this cluster node with the node specified by 'address'.
|
||||||
|
|
@ -299,7 +302,7 @@ class Cluster(system: ExtendedActorSystem, val failureDetector: FailureDetector)
|
||||||
log.info("Cluster Node [{}] - Shutting down cluster Node and cluster daemons...", selfAddress)
|
log.info("Cluster Node [{}] - Shutting down cluster Node and cluster daemons...", selfAddress)
|
||||||
|
|
||||||
system.stop(clusterDaemons)
|
system.stop(clusterDaemons)
|
||||||
eventBus.unsubscribe(eventBusListener)
|
unsubscribe(eventBusListener)
|
||||||
system.stop(eventBusListener)
|
system.stop(eventBusListener)
|
||||||
|
|
||||||
scheduler.close()
|
scheduler.close()
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import scala.concurrent.util.{ Deadline, Duration }
|
||||||
import scala.concurrent.forkjoin.ThreadLocalRandom
|
import scala.concurrent.forkjoin.ThreadLocalRandom
|
||||||
import akka.actor.{ Actor, ActorLogging, ActorRef, Address, Cancellable, Props, RootActorPath, PoisonPill, Scheduler }
|
import akka.actor.{ Actor, ActorLogging, ActorRef, Address, Cancellable, Props, RootActorPath, PoisonPill, Scheduler }
|
||||||
import akka.actor.Status.Failure
|
import akka.actor.Status.Failure
|
||||||
|
import akka.event.EventStream
|
||||||
import akka.routing.ScatterGatherFirstCompletedRouter
|
import akka.routing.ScatterGatherFirstCompletedRouter
|
||||||
import akka.util.Timeout
|
import akka.util.Timeout
|
||||||
import akka.pattern.{ AskTimeoutException, ask, pipe }
|
import akka.pattern.{ AskTimeoutException, ask, pipe }
|
||||||
|
|
@ -125,7 +126,6 @@ private[cluster] trait ClusterEnvironment {
|
||||||
private[cluster] def selfAddress: Address
|
private[cluster] def selfAddress: Address
|
||||||
private[cluster] def scheduler: Scheduler
|
private[cluster] def scheduler: Scheduler
|
||||||
private[cluster] def seedNodes: IndexedSeq[Address]
|
private[cluster] def seedNodes: IndexedSeq[Address]
|
||||||
private[cluster] def eventBus: ClusterEventBus
|
|
||||||
private[cluster] def shutdown(): Unit
|
private[cluster] def shutdown(): Unit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -808,17 +808,19 @@ private[cluster] final class ClusterCoreDaemon(environment: ClusterEnvironment)
|
||||||
}
|
}
|
||||||
|
|
||||||
def publishState(): Unit = {
|
def publishState(): Unit = {
|
||||||
environment.eventBus publish MembershipGossipChanged(latestGossip)
|
eventStream publish MembershipGossipChanged(latestGossip)
|
||||||
environment.eventBus publish InternalStatsChanged(stats)
|
eventStream publish InternalStatsChanged(stats)
|
||||||
}
|
}
|
||||||
|
|
||||||
def publishMembers(oldMembers: SortedSet[Member]): Unit = {
|
def publishMembers(oldMembers: SortedSet[Member]): Unit = {
|
||||||
val oldMembersStatus = oldMembers.map(m ⇒ (m.address, m.status))
|
val oldMembersStatus = oldMembers.map(m ⇒ (m.address, m.status))
|
||||||
val newMembersStatus = latestGossip.members.map(m ⇒ (m.address, m.status))
|
val newMembersStatus = latestGossip.members.map(m ⇒ (m.address, m.status))
|
||||||
if (newMembersStatus != oldMembersStatus)
|
if (newMembersStatus != oldMembersStatus)
|
||||||
environment.eventBus publish MembersChanged(latestGossip.members)
|
eventStream publish MembersChanged(latestGossip.members)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def eventStream: EventStream = context.system.eventStream
|
||||||
|
|
||||||
def ping(p: Ping): Unit = sender ! Pong(p)
|
def ping(p: Ping): Unit = sender ! Pong(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
||||||
/**
|
|
||||||
* Copyright (C) 2009-2012 Typesafe Inc. <http://www.typesafe.com>
|
|
||||||
*/
|
|
||||||
package akka.cluster
|
|
||||||
|
|
||||||
import akka.event.ActorEventBus
|
|
||||||
import akka.event.SubchannelClassification
|
|
||||||
import akka.actor.ActorRef
|
|
||||||
import akka.util.Subclassification
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Changes to the Cluster are published to this local event bus
|
|
||||||
* as [[akka.cluster.ClusterEvent.ClusterDomainEvent]] subclasses.
|
|
||||||
*/
|
|
||||||
class ClusterEventBus extends ActorEventBus with SubchannelClassification {
|
|
||||||
|
|
||||||
type Event = AnyRef
|
|
||||||
type Classifier = Class[_]
|
|
||||||
|
|
||||||
protected implicit val subclassification = new Subclassification[Class[_]] {
|
|
||||||
def isEqual(x: Class[_], y: Class[_]) = x == y
|
|
||||||
def isSubclass(x: Class[_], y: Class[_]) = y isAssignableFrom x
|
|
||||||
}
|
|
||||||
|
|
||||||
protected def classify(event: AnyRef): Class[_] = event.getClass
|
|
||||||
|
|
||||||
protected def publish(event: AnyRef, subscriber: ActorRef) = {
|
|
||||||
if (subscriber.isTerminated) unsubscribe(subscriber)
|
|
||||||
else subscriber ! event
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue