Enable some Aeron tests in nightly-builds, #31010 (#31218)

* and enable gc logging via -Dakka.ci-server=true in .jvmopts-ci
* and some cleanup
* exclude ClusterReceptionistSpec and JoinConfigCompatCheckerRollingUpdateSpec
  with new tag
This commit is contained in:
Patrik Nordwall 2022-03-09 07:27:31 +01:00 committed by GitHub
parent ad5864c6d8
commit 5e3e61458a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 94 additions and 35 deletions

View file

@ -56,7 +56,6 @@ jobs:
run: |-
sbt -jvm-opts .jvmopts-ci \
-Dakka.mima.enabled=false \
-Dakka.ci-server=true \
-Dakka.test.multi-in-test=false \
-Dakka.test.timefactor=2 \
-Dakka.actor.testkit.typed.timefactor=2 \

View file

@ -94,6 +94,7 @@ jobs:
uses: coursier/cache-action@v6.2
- name: sbt ${{ matrix.command }}
# note that this is not running any multi-jvm tests because multi-in-test=false
run: |-
sbt -jvm-opts .jvmopts-ci \
-Djava.security.egd=file:/dev/./urandom \
@ -101,13 +102,8 @@ jobs:
-Dakka.test.timefactor=2 \
-Dakka.actor.testkit.typed.timefactor=2 \
-Dakka.test.tags.exclude=gh-exclude,timing \
-Dakka.test.multi-in-test=false \
-Dakka.cluster.assert=on \
-Dakka.test.names.exclude=akka.cluster.Stress \
-Dmultinode.XX:MetaspaceSize=128M \
-Dmultinode.Xms256M \
-Dmultinode.Xmx256M \
-Dmultinode.Xlog:gc \
-Dmultinode.XX:+AlwaysActAsServerClassMachine \
clean ${{ matrix.command }}
- name: Email on failure
@ -139,11 +135,11 @@ jobs:
jdkVersion: ["adopt@1.8.0", "adopt@1.11", "openjdk@1.17.0"]
include:
- jdkVersion: adopt@1.8.0
extraOpts: "-Dmultinode.XX:+PrintGCDetails -Dmultinode.XX:+PrintGCTimeStamps"
extraOpts: ""
- jdkVersion: adopt@1.11
extraOpts: "-Dmultinode.Xlog:gc"
extraOpts: ""
- jdkVersion: openjdk@1.17.0
extraopts: "-Dmultinode.Xlog:gc"
extraopts: ""
steps:
- name: Checkout
uses: actions/checkout@v2
@ -159,7 +155,7 @@ jobs:
uses: coursier/cache-action@v6.2
- name: Compile and Test
# note that this is not running any multi-jvm tests (yet) because multi-in-test=false
# note that this is not running any multi-jvm tests because multi-in-test=false
run: |-
sbt -jvm-opts .jvmopts-ci \
-Dakka.cluster.assert=on \
@ -168,10 +164,6 @@ jobs:
-Dakka.actor.testkit.typed.timefactor=2 \
-Dakka.test.tags.exclude=gh-exclude,timing \
-Dakka.test.multi-in-test=false \
-Dmultinode.XX:MetaspaceSize=128M \
-Dmultinode.Xms256M \
-Dmultinode.Xmx256M \
-Dmultinode.XX:+AlwaysActAsServerClassMachine \
${{ matrix.extraOpts }} \
clean "+~ ${{ matrix.scalaVersion }} test" checkTestsHaveRun
@ -225,3 +217,58 @@ jobs:
body: |
Job ${{ github.job }} in workflow ${{ github.workflow }} of ${{github.repository}} failed!
https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}
akka-artery-aeron-tests:
name: Akka Artery Aeron Tests
runs-on: ubuntu-20.04
if: github.repository == 'akka/akka'
strategy:
fail-fast: false
matrix:
command:
- akka-remote/test akka-remote-tests/test
- akka-cluster/test akka-cluster-typed/test
steps:
- name: Checkout
uses: actions/checkout@v2
with:
# we don't know what commit the last tag was it's safer to get entire repo so previousStableVersion resolves
fetch-depth: 0
- name: Set up JDK 11
uses: olafurpg/setup-scala@v10
with:
java-version: adopt@1.11
- name: Cache Coursier cache
uses: coursier/cache-action@v6.2
- name: sbt ${{ matrix.command }}
# note that this is not running any multi-jvm tests because multi-in-test=false
run: |-
sbt -jvm-opts .jvmopts-ci \
-Djava.security.egd=file:/dev/./urandom \
-Dakka.remote.artery.transport=aeron-udp \
-Dakka.test.timefactor=2 \
-Dakka.actor.testkit.typed.timefactor=2 \
-Dakka.test.tags.exclude=gh-exclude,gh-exclude-aeron,timing \
-Dakka.test.multi-in-test=false \
-Dakka.cluster.assert=on \
-Daeron.dir=/opt/volumes/media-driver \
-Daeron.term.buffer.length=33554432 \
clean ${{ matrix.command }}
- name: Email on failure
if: ${{ failure() }}
uses: dawidd6/action-send-mail@v3
with:
server_address: smtp.gmail.com
server_port: 465
username: ${{secrets.MAIL_USERNAME}}
password: ${{secrets.MAIL_PASSWORD}}
subject: "Failed: ${{ github.workflow }} / ${{ github.job }}"
to: akka.official@gmail.com
from: Akka CI (GHActions)
body: |
Job ${{ github.job }} in workflow ${{ github.workflow }} of ${{github.repository}} failed!
https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}

View file

@ -57,7 +57,6 @@ jobs:
-Dmultinode.XX:MetaspaceSize=128M \
-Dmultinode.Xms256M \
-Dmultinode.Xmx256M \
-Dmultinode.Xlog:gc \
-Dmultinode.XX:+AlwaysActAsServerClassMachine \
"+~ 3 ${{ matrix.command }}"

View file

@ -39,7 +39,6 @@ jobs:
-Dmultinode.XX:MetaspaceSize=128M \
-Dmultinode.Xms256M \
-Dmultinode.Xmx256M \
-Dmultinode.Xlog:gc \
-Dmultinode.XX:+AlwaysActAsServerClassMachine \
clean test

View file

@ -12,3 +12,4 @@
-XX:MetaspaceSize=512M
-XX:-ClassUnloadingWithConcurrentMark
-Djava.security.egd=file:/dev/./urandom
-Dakka.ci-server=true

View file

@ -8,9 +8,11 @@ import java.util.concurrent.ThreadLocalRandom
import scala.concurrent.Await
import scala.concurrent.duration._
import com.typesafe.config.ConfigFactory
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec
import akka.actor.RootActorPath
import akka.actor.testkit.typed.FishingOutcome
import akka.actor.testkit.typed.scaladsl.ActorTestKit
@ -31,6 +33,8 @@ import akka.serialization.jackson.CborSerializable
import akka.testkit.LongRunningTest
import org.scalatest.concurrent.ScalaFutures
import akka.testkit.GHExcludeAeronTest
object ClusterReceptionistSpec {
val config = ConfigFactory.parseString(s"""
akka.loglevel = DEBUG # issue #24960
@ -80,7 +84,7 @@ class ClusterReceptionistSpec extends AnyWordSpec with Matchers with LogCapturin
"The cluster receptionist" must {
"eventually replicate registrations to the other side" taggedAs (LongRunningTest) in {
"eventually replicate registrations to the other side".taggedAs(LongRunningTest, GHExcludeAeronTest) in {
val testKit1 = ActorTestKit("ClusterReceptionistSpec-test-1", ClusterReceptionistSpec.config)
val system1 = testKit1.system
val testKit2 = ActorTestKit(system1.name, system1.settings.config)
@ -118,7 +122,7 @@ class ClusterReceptionistSpec extends AnyWordSpec with Matchers with LogCapturin
}
}
"handle registrations before joining" taggedAs (LongRunningTest) in {
"handle registrations before joining".taggedAs(LongRunningTest, GHExcludeAeronTest) in {
val testKit1 = ActorTestKit("ClusterReceptionistSpec-test-2", ClusterReceptionistSpec.config)
val system1 = testKit1.system
val testKit2 = ActorTestKit(system1.name, system1.settings.config)
@ -148,11 +152,11 @@ class ClusterReceptionistSpec extends AnyWordSpec with Matchers with LogCapturin
}
}
"remove registrations when node dies" taggedAs (LongRunningTest) in {
"remove registrations when node dies".taggedAs(LongRunningTest, GHExcludeAeronTest) in {
testNodeRemoval(down = true)
}
"remove registrations when node leaves" taggedAs (LongRunningTest) in {
"remove registrations when node leaves".taggedAs(LongRunningTest, GHExcludeAeronTest) in {
testNodeRemoval(down = false)
}
@ -215,7 +219,7 @@ class ClusterReceptionistSpec extends AnyWordSpec with Matchers with LogCapturin
}
}
"not remove registrations when self is shutdown" taggedAs (LongRunningTest) in {
"not remove registrations when self is shutdown".taggedAs(LongRunningTest, GHExcludeAeronTest) in {
val testKit1 = ActorTestKit("ClusterReceptionistSpec-test-4", ClusterReceptionistSpec.config)
val system1 = testKit1.system
val testKit2 = ActorTestKit(system1.name, system1.settings.config)
@ -264,7 +268,7 @@ class ClusterReceptionistSpec extends AnyWordSpec with Matchers with LogCapturin
}
"work with services registered before node joins cluster" taggedAs (LongRunningTest) in {
"work with services registered before node joins cluster".taggedAs(LongRunningTest, GHExcludeAeronTest) in {
val testKit1 = ActorTestKit("ClusterReceptionistSpec-test-5", ClusterReceptionistSpec.config)
val system1 = testKit1.system
val testKit2 = ActorTestKit(system1.name, system1.settings.config)
@ -322,7 +326,7 @@ class ClusterReceptionistSpec extends AnyWordSpec with Matchers with LogCapturin
}
}
"handle a new incarnation of the same node well" taggedAs (LongRunningTest) in {
"handle a new incarnation of the same node well".taggedAs(LongRunningTest, GHExcludeAeronTest) in {
val testKit1 = ActorTestKit("ClusterReceptionistSpec-test-6", ClusterReceptionistSpec.config)
val system1 = testKit1.system
val testKit2 = ActorTestKit(system1.name, system1.settings.config)
@ -423,7 +427,9 @@ class ClusterReceptionistSpec extends AnyWordSpec with Matchers with LogCapturin
}
// reproducer of issue #26284
"handle a new incarnation of the same node that is no longer part of same cluster" taggedAs (LongRunningTest) in {
"handle a new incarnation of the same node that is no longer part of same cluster".taggedAs(
LongRunningTest,
GHExcludeAeronTest) in {
val testKit1 = ActorTestKit(
"ClusterReceptionistSpec-test-7",
ConfigFactory.parseString("""
@ -527,7 +533,7 @@ class ClusterReceptionistSpec extends AnyWordSpec with Matchers with LogCapturin
}
}
"not lose removals on concurrent updates to same key" taggedAs (LongRunningTest) in {
"not lose removals on concurrent updates to same key".taggedAs(LongRunningTest, GHExcludeAeronTest) in {
val config = ConfigFactory.parseString("""
# disable delta propagation so we can have repeatable concurrent writes
# without delta reaching between nodes already
@ -598,7 +604,7 @@ class ClusterReceptionistSpec extends AnyWordSpec with Matchers with LogCapturin
}
}
"not conflict with the ClusterClient receptionist default name" taggedAs (LongRunningTest) in {
"not conflict with the ClusterClient receptionist default name".taggedAs(LongRunningTest, GHExcludeAeronTest) in {
val testKit = ActorTestKit(s"ClusterReceptionistSpec-test-9", ClusterReceptionistSpec.config)
try {
testKit.system.systemActorOf(Behaviors.ignore, "receptionist")
@ -607,7 +613,7 @@ class ClusterReceptionistSpec extends AnyWordSpec with Matchers with LogCapturin
}
}
"handle unregistration and re-registration of services" taggedAs (LongRunningTest) in {
"handle unregistration and re-registration of services".taggedAs(LongRunningTest, GHExcludeAeronTest) in {
val testKit1 = ActorTestKit("ClusterReceptionistSpec-test-10", ClusterReceptionistSpec.config)
val system1 = testKit1.system
val testKit2 = ActorTestKit(system1.name, system1.settings.config)
@ -665,7 +671,7 @@ class ClusterReceptionistSpec extends AnyWordSpec with Matchers with LogCapturin
}
"handle unregistration per key not per actor" taggedAs (LongRunningTest) in {
"handle unregistration per key not per actor".taggedAs(LongRunningTest, GHExcludeAeronTest) in {
val testKit1 = ActorTestKit("ClusterReceptionistSpec-test-11", ClusterReceptionistSpec.config)
val system1 = testKit1.system
val testKit2 = ActorTestKit(system1.name, system1.settings.config)
@ -717,7 +723,7 @@ class ClusterReceptionistSpec extends AnyWordSpec with Matchers with LogCapturin
}
"handle concurrent unregistration and registration on different nodes" taggedAs (LongRunningTest) in {
"handle concurrent unregistration and registration on different nodes".taggedAs(LongRunningTest, GHExcludeAeronTest) in {
// this covers the fact that with ddata a removal can be lost
val testKit1 = ActorTestKit("ClusterReceptionistSpec-test-12", ClusterReceptionistSpec.config)
val system1 = testKit1.system
@ -776,7 +782,7 @@ class ClusterReceptionistSpec extends AnyWordSpec with Matchers with LogCapturin
}
// Fixme concurrent registration and unregistration
"notify subscribers when registering and joining simultaneously" taggedAs (LongRunningTest) in {
"notify subscribers when registering and joining simultaneously".taggedAs(LongRunningTest, GHExcludeAeronTest) in {
// failing test reproducer for issue #28792
// It's possible that the registry entry from the ddata update arrives before MemberJoined.
val config = ConfigFactory.parseString("""
@ -839,7 +845,7 @@ class ClusterReceptionistSpec extends AnyWordSpec with Matchers with LogCapturin
}
}
"never use durable store" taggedAs (LongRunningTest) in {
"never use durable store".taggedAs(LongRunningTest, GHExcludeAeronTest) in {
val testKit = ActorTestKit("ClusterReceptionistSpec-test-14", ClusterReceptionistSpec.config)
val system = testKit.system
try {

View file

@ -6,7 +6,10 @@ package akka.cluster
import scala.collection.{ immutable => im }
import scala.concurrent.duration._
import com.typesafe.config.{ Config, ConfigFactory }
import akka.testkit.GHExcludeAeronTest
import akka.testkit.LongRunningTest
object JoinConfigCompatCheckerRollingUpdateSpec {
@ -47,14 +50,18 @@ class JoinConfigCompatCheckerRollingUpdateSpec
"A Node" must {
val timeout = 20.seconds
"NOT be allowed to re-join a cluster if it has a new, additional configuration the others do not have and not the old" taggedAs LongRunningTest in {
"NOT be allowed to re-join a cluster if it has a new, additional configuration the others do not have and not the old"
.taggedAs(LongRunningTest, GHExcludeAeronTest) in {
// confirms the 2 attempted re-joins fail with both nodes being terminated
upgradeCluster(3, v1Config, v2ConfigIncompatible, timeout, timeout, enforced = true, shouldRejoin = false)
}
"be allowed to re-join a cluster if it has a new, additional property and checker the others do not have" taggedAs LongRunningTest in {
"be allowed to re-join a cluster if it has a new, additional property and checker the others do not have".taggedAs(
LongRunningTest,
GHExcludeAeronTest) in {
upgradeCluster(3, v1Config, v2Config, timeout, timeout * 3, enforced = true, shouldRejoin = true)
}
"be allowed to re-join a cluster if it has a new, additional configuration the others do not have and configured to NOT enforce it" taggedAs LongRunningTest in {
"be allowed to re-join a cluster if it has a new, additional configuration the others do not have and configured to NOT enforce it"
.taggedAs(LongRunningTest, GHExcludeAeronTest) in {
upgradeCluster(3, v1Config, v2Config, timeout, timeout * 3, enforced = false, shouldRejoin = true)
}
}

View file

@ -11,3 +11,4 @@ object LongRunningTest extends Tag("long-running")
object PerformanceTest extends Tag("performance")
object GHExcludeTest extends Tag("gh-exclude")
object GHExcludeAeronTest extends Tag("gh-exclude-aeron")