2012-09-24 13:07:11 -06:00
|
|
|
/*
|
2017-01-04 17:37:10 +01:00
|
|
|
* Copyright (C) 2009-2017 Lightbend Inc. <http://www.lightbend.com>
|
2012-09-24 13:07:11 -06:00
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
package akka.cluster
|
|
|
|
|
|
2014-12-12 11:49:32 -06:00
|
|
|
// TODO remove metrics
|
|
|
|
|
|
2012-09-24 13:07:11 -06:00
|
|
|
import scala.language.postfixOps
|
2012-09-21 14:50:06 +02:00
|
|
|
import scala.concurrent.duration._
|
2012-09-24 13:07:11 -06:00
|
|
|
import com.typesafe.config.ConfigFactory
|
|
|
|
|
import akka.remote.testkit.MultiNodeConfig
|
|
|
|
|
import akka.remote.testkit.MultiNodeSpec
|
|
|
|
|
import akka.testkit._
|
|
|
|
|
import akka.actor.ExtendedActorSystem
|
|
|
|
|
|
|
|
|
|
object ClusterMetricsMultiJvmSpec extends MultiNodeConfig {
|
|
|
|
|
val first = role("first")
|
|
|
|
|
val second = role("second")
|
|
|
|
|
val third = role("third")
|
|
|
|
|
val fourth = role("fourth")
|
|
|
|
|
val fifth = role("fifth")
|
|
|
|
|
|
2012-10-01 20:08:21 +02:00
|
|
|
commonConfig(debugConfig(on = false).withFallback(MultiNodeClusterSpec.clusterConfigWithFailureDetectorPuppet))
|
2012-09-24 13:07:11 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class ClusterMetricsMultiJvmNode1 extends ClusterMetricsSpec
|
|
|
|
|
class ClusterMetricsMultiJvmNode2 extends ClusterMetricsSpec
|
|
|
|
|
class ClusterMetricsMultiJvmNode3 extends ClusterMetricsSpec
|
|
|
|
|
class ClusterMetricsMultiJvmNode4 extends ClusterMetricsSpec
|
|
|
|
|
class ClusterMetricsMultiJvmNode5 extends ClusterMetricsSpec
|
|
|
|
|
|
2012-11-08 18:49:54 +01:00
|
|
|
abstract class ClusterMetricsSpec extends MultiNodeSpec(ClusterMetricsMultiJvmSpec) with MultiNodeClusterSpec {
|
2012-09-24 13:07:11 -06:00
|
|
|
import ClusterMetricsMultiJvmSpec._
|
|
|
|
|
|
2013-03-28 23:45:48 +01:00
|
|
|
private[cluster] def isSigar(collector: MetricsCollector): Boolean = collector.isInstanceOf[SigarMetricsCollector]
|
2012-11-07 20:36:24 +01:00
|
|
|
|
2012-09-24 13:07:11 -06:00
|
|
|
"Cluster metrics" must {
|
|
|
|
|
"periodically collect metrics on each node, publish ClusterMetricsChanged to the event stream, " +
|
|
|
|
|
"and gossip metrics around the node ring" taggedAs LongRunningTest in within(60 seconds) {
|
2012-10-01 20:08:21 +02:00
|
|
|
awaitClusterUp(roles: _*)
|
|
|
|
|
enterBarrier("cluster-started")
|
2015-01-16 11:09:59 +01:00
|
|
|
awaitAssert(clusterView.members.count(_.status == MemberStatus.Up) should ===(roles.size))
|
|
|
|
|
awaitAssert(clusterView.clusterMetrics.size should ===(roles.size))
|
2012-11-07 20:36:24 +01:00
|
|
|
val collector = MetricsCollector(cluster.system, cluster.settings)
|
2013-12-17 14:25:56 +01:00
|
|
|
collector.sample.metrics.size should be > (3)
|
2012-10-01 20:08:21 +02:00
|
|
|
enterBarrier("after")
|
2012-09-24 13:07:11 -06:00
|
|
|
}
|
|
|
|
|
"reflect the correct number of node metrics in cluster view" taggedAs LongRunningTest in within(30 seconds) {
|
|
|
|
|
runOn(second) {
|
|
|
|
|
cluster.leave(first)
|
|
|
|
|
}
|
|
|
|
|
enterBarrier("first-left")
|
|
|
|
|
runOn(second, third, fourth, fifth) {
|
2013-05-09 09:49:59 +02:00
|
|
|
markNodeAsUnavailable(first)
|
2015-01-16 11:09:59 +01:00
|
|
|
awaitAssert(clusterView.clusterMetrics.size should ===(roles.size - 1))
|
2012-09-24 13:07:11 -06:00
|
|
|
}
|
|
|
|
|
enterBarrier("finished")
|
|
|
|
|
}
|
|
|
|
|
}
|
2013-01-09 01:47:48 +01:00
|
|
|
}
|