2014-05-07 14:49:35 +02:00
|
|
|
package akka
|
|
|
|
|
|
|
|
|
|
import sbt._
|
2015-05-21 21:07:37 +02:00
|
|
|
import Keys._
|
2014-05-07 14:49:35 +02:00
|
|
|
|
|
|
|
|
object Dependencies {
|
|
|
|
|
|
2015-05-21 21:07:37 +02:00
|
|
|
lazy val scalaTestVersion = settingKey[String]("The version of ScalaTest to use.")
|
|
|
|
|
lazy val scalaStmVersion = settingKey[String]("The version of ScalaSTM to use.")
|
|
|
|
|
lazy val scalaCheckVersion = settingKey[String]("The version of ScalaCheck to use.")
|
2014-09-16 10:53:04 +02:00
|
|
|
|
2015-05-21 21:07:37 +02:00
|
|
|
val Versions = Seq(
|
2015-09-07 10:26:51 +02:00
|
|
|
crossScalaVersions := Seq("2.11.7"), //"2.12.0-M2"
|
2015-05-21 21:07:37 +02:00
|
|
|
scalaVersion := crossScalaVersions.value.head,
|
|
|
|
|
scalaStmVersion := sys.props.get("akka.build.scalaStmVersion").getOrElse("0.7"),
|
|
|
|
|
scalaCheckVersion := sys.props.get("akka.build.scalaCheckVersion").getOrElse("1.11.6"),
|
2015-08-14 14:31:56 +02:00
|
|
|
scalaTestVersion := (if (scalaVersion.value == "2.12.0-M2") "2.2.5-M2" else "2.2.4")
|
2015-05-21 21:07:37 +02:00
|
|
|
)
|
2014-05-07 14:49:35 +02:00
|
|
|
|
|
|
|
|
object Compile {
|
|
|
|
|
// Compile
|
2015-06-08 12:26:19 +02:00
|
|
|
|
2015-08-19 11:14:43 +02:00
|
|
|
// FIXME: change to project dependency once akka-stream merged to master
|
2015-06-08 12:26:19 +02:00
|
|
|
val akkaStream = "com.typesafe.akka" %% "akka-stream-experimental" % "1.0"
|
|
|
|
|
|
2015-05-08 16:35:29 +02:00
|
|
|
val camelCore = "org.apache.camel" % "camel-core" % "2.13.4" exclude("org.slf4j", "slf4j-api") // ApacheV2
|
2014-05-07 14:49:35 +02:00
|
|
|
|
2014-06-12 17:26:26 +09:00
|
|
|
// when updating config version, update links ActorSystem ScalaDoc to link to the updated version
|
2015-05-07 11:57:26 +02:00
|
|
|
val config = "com.typesafe" % "config" % "1.3.0" // ApacheV2
|
2015-05-08 16:35:29 +02:00
|
|
|
val netty = "io.netty" % "netty" % "3.10.3.Final" // ApacheV2
|
2015-05-21 21:07:37 +02:00
|
|
|
val scalaStm = Def.setting { "org.scala-stm" %% "scala-stm" % scalaStmVersion.value } // Modified BSD (Scala)
|
2014-05-07 14:49:35 +02:00
|
|
|
|
2015-05-08 16:35:29 +02:00
|
|
|
val slf4jApi = "org.slf4j" % "slf4j-api" % "1.7.12" // MIT
|
2014-09-11 14:32:54 +02:00
|
|
|
// mirrored in OSGi sample
|
2014-05-07 14:49:35 +02:00
|
|
|
val uncommonsMath = "org.uncommons.maths" % "uncommons-maths" % "1.2.2a" exclude("jfree", "jcommon") exclude("jfree", "jfreechart") // ApacheV2
|
|
|
|
|
val osgiCore = "org.osgi" % "org.osgi.core" % "4.3.1" // ApacheV2
|
|
|
|
|
val osgiCompendium= "org.osgi" % "org.osgi.compendium" % "4.3.1" // ApacheV2
|
2015-03-06 11:58:51 -06:00
|
|
|
|
|
|
|
|
// TODO remove with metrics from akka-cluster
|
2014-11-13 18:56:02 +02:00
|
|
|
val sigar = "org.fusesource" % "sigar" % "1.6.4" // ApacheV2
|
2014-05-07 14:49:35 +02:00
|
|
|
|
2015-05-29 18:20:51 +02:00
|
|
|
object Docs {
|
|
|
|
|
val sprayJson = "io.spray" %% "spray-json" % "1.3.2" % "test"
|
|
|
|
|
val gson = "com.google.code.gson" % "gson" % "2.3.1" % "test"
|
|
|
|
|
}
|
|
|
|
|
|
2014-05-07 14:49:35 +02:00
|
|
|
object Test {
|
2015-05-08 16:35:29 +02:00
|
|
|
val commonsMath = "org.apache.commons" % "commons-math" % "2.2" % "test" // ApacheV2
|
2014-05-07 14:49:35 +02:00
|
|
|
val commonsIo = "commons-io" % "commons-io" % "2.4" % "test" // ApacheV2
|
2015-05-08 16:35:29 +02:00
|
|
|
val commonsCodec = "commons-codec" % "commons-codec" % "1.10" % "test" // ApacheV2
|
|
|
|
|
val junit = "junit" % "junit" % "4.12" % "test" // Common Public License 1.0
|
|
|
|
|
val logback = "ch.qos.logback" % "logback-classic" % "1.1.3" % "test" // EPL 1.0 / LGPL 2.1
|
|
|
|
|
val mockito = "org.mockito" % "mockito-all" % "1.10.19" % "test" // MIT
|
2014-05-07 14:49:35 +02:00
|
|
|
// changing the scalatest dependency must be reflected in akka-docs/rst/dev/multi-jvm-testing.rst
|
2015-05-21 21:07:37 +02:00
|
|
|
val scalatest = Def.setting { "org.scalatest" %% "scalatest" % scalaTestVersion.value % "test" } // ApacheV2
|
|
|
|
|
val scalacheck = Def.setting { "org.scalacheck" %% "scalacheck" % scalaCheckVersion.value % "test" } // New BSD
|
2014-05-07 14:49:35 +02:00
|
|
|
val pojosr = "com.googlecode.pojosr" % "de.kalpatec.pojosr.framework" % "0.2.1" % "test" // ApacheV2
|
|
|
|
|
val tinybundles = "org.ops4j.pax.tinybundles" % "tinybundles" % "1.0.0" % "test" // ApacheV2
|
|
|
|
|
val log4j = "log4j" % "log4j" % "1.2.14" % "test" // ApacheV2
|
2015-05-08 16:35:29 +02:00
|
|
|
val junitIntf = "com.novocode" % "junit-interface" % "0.11" % "test" // MIT
|
|
|
|
|
val scalaXml = "org.scala-lang.modules" %% "scala-xml" % "1.0.4" % "test"
|
2015-08-19 11:14:43 +02:00
|
|
|
// FIXME: change to project dependency once akka-stream merged to master
|
|
|
|
|
val akkaStreamTestkit = "com.typesafe.akka" %% "akka-stream-testkit-experimental" % "1.0" % "test"
|
=act,tes Initial draft of internal MetricsKit
Note: This is NOT aimed to provide an micro-benchmarking solution.
The goal is to provide data for broad trend analysis. For techniques
that fight the inliner and other specialised techniques, refer to JMH.
+ custom console and graphite reporters
- had to be custom because it's not possible to add custom metric
types to the existing reporters
+ initial hdr.Histogram histogram() provider, see
http://latencyutils.github.io/LatencyUtils/
+ Not using timers provided by Metrics, instead use the above histogram
+ Added average Actor size measurement
+ Measuring the "blocking time" when an actor is created, before we fire
of the async part of this process; Measures in loop and will fluctuate
a lot. Times are in `us` -- System.nanoTime should provide good enough
resolution.
+ Measuring total actor creation time by using
`KnownOpsInTimespanTimer`, which given a known number of ops, in a
large amount of time, roughtly estimates time per one operation.
// Yes, we are aware of the possibility of GC pauses and other horrors
+ All classes are `private[akka]`, we should not encourage people to use
this yet
+ Counters use Java 8's `LongAdder`, which is metric's private;
The new trend in Java land will be copy paste-ing this class ;)
+ Metrics are logged to Graphite, so we can long-term analyse these
+ Reporters are configurable using typesafe-config
! I'm not very happy about how I work around Metrics not being too open
for adding additional custom metrics. Seems like a hack at places.
I will consider removing the Metrics dependency all together.
numbers
Example output:
```
-- KnownOpsInTimespanTimer-------------------------------------------
actor-creation.total.creating-100000-actors.Props|new-EmptyArgsActor|…||-same
ops = 100000
time = 1.969 s
ops/s = 50782.22
avg = 19.69 μs
-- AveragingGauge---------------------------------------------------
actor-creation.Props|new-EmptyArgsActor|…||-same.avg-mem-per-actor
avg = 439.67
```
2014-04-29 10:50:36 +02:00
|
|
|
|
|
|
|
|
// metrics, measurements, perf testing
|
2015-05-08 16:35:29 +02:00
|
|
|
val metrics = "com.codahale.metrics" % "metrics-core" % "3.0.2" % "test" // ApacheV2
|
|
|
|
|
val metricsJvm = "com.codahale.metrics" % "metrics-jvm" % "3.0.2" % "test" // ApacheV2
|
=act,tes Initial draft of internal MetricsKit
Note: This is NOT aimed to provide an micro-benchmarking solution.
The goal is to provide data for broad trend analysis. For techniques
that fight the inliner and other specialised techniques, refer to JMH.
+ custom console and graphite reporters
- had to be custom because it's not possible to add custom metric
types to the existing reporters
+ initial hdr.Histogram histogram() provider, see
http://latencyutils.github.io/LatencyUtils/
+ Not using timers provided by Metrics, instead use the above histogram
+ Added average Actor size measurement
+ Measuring the "blocking time" when an actor is created, before we fire
of the async part of this process; Measures in loop and will fluctuate
a lot. Times are in `us` -- System.nanoTime should provide good enough
resolution.
+ Measuring total actor creation time by using
`KnownOpsInTimespanTimer`, which given a known number of ops, in a
large amount of time, roughtly estimates time per one operation.
// Yes, we are aware of the possibility of GC pauses and other horrors
+ All classes are `private[akka]`, we should not encourage people to use
this yet
+ Counters use Java 8's `LongAdder`, which is metric's private;
The new trend in Java land will be copy paste-ing this class ;)
+ Metrics are logged to Graphite, so we can long-term analyse these
+ Reporters are configurable using typesafe-config
! I'm not very happy about how I work around Metrics not being too open
for adding additional custom metrics. Seems like a hack at places.
I will consider removing the Metrics dependency all together.
numbers
Example output:
```
-- KnownOpsInTimespanTimer-------------------------------------------
actor-creation.total.creating-100000-actors.Props|new-EmptyArgsActor|…||-same
ops = 100000
time = 1.969 s
ops/s = 50782.22
avg = 19.69 μs
-- AveragingGauge---------------------------------------------------
actor-creation.Props|new-EmptyArgsActor|…||-same.avg-mem-per-actor
avg = 439.67
```
2014-04-29 10:50:36 +02:00
|
|
|
val latencyUtils = "org.latencyutils" % "LatencyUtils" % "1.0.3" % "test" // Free BSD
|
|
|
|
|
val hdrHistogram = "org.hdrhistogram" % "HdrHistogram" % "1.1.4" % "test" // CC0
|
2014-05-19 17:29:35 +02:00
|
|
|
val metricsAll = Seq(metrics, metricsJvm, latencyUtils, hdrHistogram)
|
2014-12-12 11:49:32 -06:00
|
|
|
|
|
|
|
|
// sigar logging
|
2015-05-08 16:35:29 +02:00
|
|
|
val slf4jJul = "org.slf4j" % "jul-to-slf4j" % "1.7.12" % "test" // MIT
|
|
|
|
|
val slf4jLog4j = "org.slf4j" % "log4j-over-slf4j" % "1.7.12" % "test" // MIT
|
2014-12-12 11:49:32 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
object Provided {
|
|
|
|
|
// TODO remove from "test" config
|
2015-08-18 14:51:36 +02:00
|
|
|
val sigarLoader = "io.kamon" % "sigar-loader" % "1.6.6-rev002" % "optional;provided;test" // ApacheV2
|
2015-03-06 11:58:51 -06:00
|
|
|
|
|
|
|
|
val levelDB = "org.iq80.leveldb" % "leveldb" % "0.7" % "optional;provided" // ApacheV2
|
2015-05-08 16:35:29 +02:00
|
|
|
val levelDBNative = "org.fusesource.leveldbjni" % "leveldbjni-all" % "1.8" % "optional;provided" // New BSD
|
2014-05-07 14:49:35 +02:00
|
|
|
}
|
2014-12-12 11:49:32 -06:00
|
|
|
|
2014-05-07 14:49:35 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
import Compile._
|
2015-05-21 21:07:37 +02:00
|
|
|
val l = libraryDependencies
|
2014-05-07 14:49:35 +02:00
|
|
|
|
2015-05-21 21:07:37 +02:00
|
|
|
val actor = l ++= Seq(config)
|
2014-05-07 14:49:35 +02:00
|
|
|
|
2015-05-21 21:07:37 +02:00
|
|
|
val testkit = l ++= Seq(Test.junit, Test.scalatest.value) ++ Test.metricsAll
|
2014-05-07 14:49:35 +02:00
|
|
|
|
2015-02-18 00:15:50 +01:00
|
|
|
val actorTests = l ++= Seq(Test.junit, Test.scalatest.value, Test.commonsCodec, Test.commonsMath, Test.mockito, Test.scalacheck.value, Test.junitIntf)
|
2014-05-07 14:49:35 +02:00
|
|
|
|
2015-02-18 00:15:50 +01:00
|
|
|
val remote = l ++= Seq(netty, uncommonsMath, Test.junit, Test.scalatest.value)
|
2014-05-07 14:49:35 +02:00
|
|
|
|
2015-05-21 21:07:37 +02:00
|
|
|
val remoteTests = l ++= Seq(Test.junit, Test.scalatest.value, Test.scalaXml)
|
2014-05-07 14:49:35 +02:00
|
|
|
|
2015-05-21 21:07:37 +02:00
|
|
|
val cluster = l ++= Seq(Test.junit, Test.scalatest.value)
|
2015-04-27 14:25:10 +02:00
|
|
|
|
2015-05-21 21:07:37 +02:00
|
|
|
val clusterTools = l ++= Seq(Test.junit, Test.scalatest.value)
|
2015-04-27 14:48:28 +02:00
|
|
|
|
2015-05-21 21:07:37 +02:00
|
|
|
val clusterSharding = l ++= Seq(Test.junit, Test.scalatest.value, Test.commonsIo)
|
2014-05-07 14:49:35 +02:00
|
|
|
|
2015-05-21 21:07:37 +02:00
|
|
|
val clusterMetrics = l ++= Seq(Provided.sigarLoader, Test.slf4jJul, Test.slf4jLog4j, Test.logback, Test.mockito)
|
2015-05-17 12:28:47 +02:00
|
|
|
|
|
|
|
|
val distributedData = l ++= Seq(Test.junit, Test.scalatest.value)
|
2014-07-08 18:30:15 +02:00
|
|
|
|
2015-05-21 21:07:37 +02:00
|
|
|
val slf4j = l ++= Seq(slf4jApi, Test.logback)
|
2014-05-07 14:49:35 +02:00
|
|
|
|
2015-05-21 21:07:37 +02:00
|
|
|
val agent = l ++= Seq(scalaStm.value, Test.scalatest.value, Test.junit)
|
2014-05-07 14:49:35 +02:00
|
|
|
|
2015-02-18 00:15:50 +01:00
|
|
|
val persistence = l ++= Seq(Provided.levelDB, Provided.levelDBNative, Test.scalatest.value, Test.junit, Test.commonsIo, Test.scalaXml)
|
2014-05-07 14:49:35 +02:00
|
|
|
|
2015-08-19 11:14:43 +02:00
|
|
|
val persistenceQuery = l ++= Seq(akkaStream, Test.scalatest.value, Test.junit, Test.commonsIo, Test.akkaStreamTestkit)
|
2015-06-08 12:26:19 +02:00
|
|
|
|
2015-05-21 21:07:37 +02:00
|
|
|
val persistenceTck = l ++= Seq(Test.scalatest.value.copy(configurations = Some("compile")), Test.junit.copy(configurations = Some("compile")))
|
2014-05-07 14:49:35 +02:00
|
|
|
|
2015-05-21 21:07:37 +02:00
|
|
|
val kernel = l ++= Seq(Test.scalatest.value, Test.junit)
|
2014-09-16 10:53:04 +02:00
|
|
|
|
2015-05-21 21:07:37 +02:00
|
|
|
val camel = l ++= Seq(camelCore, Test.scalatest.value, Test.junit, Test.mockito, Test.logback, Test.commonsIo, Test.junitIntf)
|
2014-09-16 10:53:04 +02:00
|
|
|
|
2015-05-21 21:07:37 +02:00
|
|
|
val osgi = l ++= Seq(osgiCore, osgiCompendium, Test.logback, Test.commonsIo, Test.pojosr, Test.tinybundles, Test.scalatest.value, Test.junit)
|
2014-09-16 10:53:04 +02:00
|
|
|
|
2015-05-29 18:20:51 +02:00
|
|
|
val docs = l ++= Seq(Test.scalatest.value, Test.junit, Test.junitIntf, Docs.sprayJson, Docs.gson)
|
2014-09-16 10:53:04 +02:00
|
|
|
|
2015-05-21 21:07:37 +02:00
|
|
|
val contrib = l ++= Seq(Test.junitIntf, Test.commonsIo)
|
2015-08-11 12:22:38 +02:00
|
|
|
|
|
|
|
|
val benchJmh = l ++= Seq(Provided.levelDB, Provided.levelDBNative)
|
2014-09-16 10:53:04 +02:00
|
|
|
}
|