From 7277d03e7a4230ab38ac98081ce139b1548d1089 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Wed, 1 Jul 2015 15:09:16 +0200 Subject: [PATCH] =clu #15404 Require at least one subscribe class * also check ClusterDomainEvent isAssignableFrom --- .../cluster/metrics/ClusterMetricsExtensionSpec.scala | 3 +-- akka-cluster/src/main/scala/akka/cluster/Cluster.scala | 8 ++++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/akka-cluster-metrics/src/multi-jvm/scala/akka/cluster/metrics/ClusterMetricsExtensionSpec.scala b/akka-cluster-metrics/src/multi-jvm/scala/akka/cluster/metrics/ClusterMetricsExtensionSpec.scala index 84a2f818d3..0d681b8b1f 100644 --- a/akka-cluster-metrics/src/multi-jvm/scala/akka/cluster/metrics/ClusterMetricsExtensionSpec.scala +++ b/akka-cluster-metrics/src/multi-jvm/scala/akka/cluster/metrics/ClusterMetricsExtensionSpec.scala @@ -151,8 +151,7 @@ abstract class ClusterMetricsDisabledSpec extends MultiNodeSpec(ClusterMetricsDi // TODO ensure same contract //clusterView.clusterMetrics.size should ===(0) metricsView.clusterMetrics.size should ===(0) - cluster.subscribe(testActor, classOf[ClusterMetricsChanged]) - expectMsgType[CurrentClusterState] + ClusterMetricsExtension(system).subscribe(testActor) expectNoMsg // TODO ensure same contract //clusterView.clusterMetrics.size should ===(0) diff --git a/akka-cluster/src/main/scala/akka/cluster/Cluster.scala b/akka-cluster/src/main/scala/akka/cluster/Cluster.scala index a61c0dbdb1..69fd6b0e75 100644 --- a/akka-cluster/src/main/scala/akka/cluster/Cluster.scala +++ b/akka-cluster/src/main/scala/akka/cluster/Cluster.scala @@ -206,7 +206,7 @@ class Cluster(val system: ExtendedActorSystem) extends Extension { * will be sent to the subscriber as the first message. */ @varargs def subscribe(subscriber: ActorRef, to: Class[_]*): Unit = - clusterCore ! InternalClusterAction.Subscribe(subscriber, initialStateMode = InitialStateAsSnapshot, to.toSet) + subscribe(subscriber, initialStateMode = InitialStateAsSnapshot, to: _*) /** * Subscribe to one or more cluster domain events. @@ -223,8 +223,12 @@ class Cluster(val system: ExtendedActorSystem) extends Extension { * * Note that for large clusters it is more efficient to use `InitialStateAsSnapshot`. */ - @varargs def subscribe(subscriber: ActorRef, initialStateMode: SubscriptionInitialStateMode, to: Class[_]*): Unit = + @varargs def subscribe(subscriber: ActorRef, initialStateMode: SubscriptionInitialStateMode, to: Class[_]*): Unit = { + require(to.length > 0, "at least one `ClusterDomainEvent` class is required") + require(to.forall(classOf[ClusterDomainEvent].isAssignableFrom), + s"subscribe to `akka.cluster.ClusterEvent.ClusterDomainEvent` or subclasses, was [${to.map(_.getName).mkString(", ")}]") clusterCore ! InternalClusterAction.Subscribe(subscriber, initialStateMode, to.toSet) + } /** * Unsubscribe to all cluster domain events.