Refactor remember entitites in shards (#28776)

* DData and Persistence based remember entitites refactored
* Order methods in the order of init in the shard.
* Some bad isolation between test cases causing problems
* Test coverage for remember entities store failures
* WithLogCapturing where applicable
* MiMa filters
* Timeouts from config for persistent remember entities
* Single method for deliver, less utf-8 encoding
* Include detail on write failure
* Don't send message to dead letter if it is actually handled in BackOffSupervisor
* Back off supervisor log format plus use warning for hitting max restarts
* actor/message based spi
* Missing assert that node had joined cluster
This commit is contained in:
Johan Andrén 2020-04-03 14:57:49 +02:00 committed by GitHub
parent 4c81ef838b
commit 722b68e7cc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
35 changed files with 1725 additions and 929 deletions

View file

@ -6,6 +6,7 @@ package akka.cluster.sharding
import akka.actor._
import akka.cluster.sharding.ShardRegion.Passivate
import akka.cluster.sharding.ShardRegion.StartEntity
import akka.remote.testconductor.RoleName
import akka.remote.transport.ThrottlerTransportAdapter.Direction
import akka.serialization.jackson.CborSerializable
@ -20,13 +21,20 @@ object ClusterShardingFailureSpec {
case class Add(id: String, i: Int) extends CborSerializable
case class Value(id: String, n: Int) extends CborSerializable
class Entity extends Actor {
class Entity extends Actor with ActorLogging {
log.debug("Starting")
var n = 0
def receive = {
case Get(id) => sender() ! Value(id, n)
case Add(_, i) => n += i
case Get(id) =>
log.debug("Got get request from {}", sender())
sender() ! Value(id, n)
case Add(_, i) =>
n += i
log.debug("Got add request from {}", sender())
}
override def postStop(): Unit = log.debug("Stopping")
}
val extractEntityId: ShardRegion.ExtractEntityId = {
@ -35,8 +43,9 @@ object ClusterShardingFailureSpec {
}
val extractShardId: ShardRegion.ExtractShardId = {
case Get(id) => id.charAt(0).toString
case Add(id, _) => id.charAt(0).toString
case Get(id) => id.charAt(0).toString
case Add(id, _) => id.charAt(0).toString
case StartEntity(id) => id
}
}
@ -44,11 +53,14 @@ abstract class ClusterShardingFailureSpecConfig(override val mode: String)
extends MultiNodeClusterShardingConfig(
mode,
additionalConfig = s"""
akka.loglevel=DEBUG
akka.cluster.roles = ["backend"]
akka.cluster.sharding {
coordinator-failure-backoff = 3s
shard-failure-backoff = 3s
}
# don't leak ddata state across runs
akka.cluster.sharding.distributed-data.durable.keys = []
akka.persistence.journal.leveldb-shared.store.native = off
# using Java serialization for these messages because test is sending them
# to other nodes, which isn't normal usage.