Turn verbose logging into a config flag (#29168)
This commit is contained in:
parent
5a5468dd4a
commit
224fb1592d
18 changed files with 61 additions and 43 deletions
|
|
@ -206,6 +206,10 @@ akka.cluster.sharding {
|
||||||
|
|
||||||
# The interval between retries for acquiring the lease
|
# The interval between retries for acquiring the lease
|
||||||
lease-retry-interval = 5s
|
lease-retry-interval = 5s
|
||||||
|
|
||||||
|
# Provide a higher level of details in the debug logs, often per routed message. Be careful about enabling
|
||||||
|
# in production systems.
|
||||||
|
verbose-debug-logging = off
|
||||||
}
|
}
|
||||||
# //#sharding-ext-config
|
# //#sharding-ext-config
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -111,10 +111,6 @@ private[akka] object Shard {
|
||||||
private val RememberEntityTimeoutKey = "RememberEntityTimeout"
|
private val RememberEntityTimeoutKey = "RememberEntityTimeout"
|
||||||
final case class RememberEntityTimeout(operation: RememberEntitiesShardStore.Command)
|
final case class RememberEntityTimeout(operation: RememberEntitiesShardStore.Command)
|
||||||
|
|
||||||
// FIXME Leaving this on while we are working on the remember entities refactor
|
|
||||||
// should it go in settings perhaps, useful for tricky sharding bugs?
|
|
||||||
final val VerboseDebug = true
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* State machine for an entity:
|
* State machine for an entity:
|
||||||
* {{{
|
* {{{
|
||||||
|
|
@ -253,7 +249,7 @@ private[akka] object Shard {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final class Entities(log: LoggingAdapter, rememberingEntities: Boolean) {
|
final class Entities(log: LoggingAdapter, rememberingEntities: Boolean, verboseDebug: Boolean) {
|
||||||
private val entities: java.util.Map[EntityId, EntityState] = new util.HashMap[EntityId, EntityState]()
|
private val entities: java.util.Map[EntityId, EntityState] = new util.HashMap[EntityId, EntityState]()
|
||||||
// needed to look up entity by reg when a Passivating is received
|
// needed to look up entity by reg when a Passivating is received
|
||||||
private val byRef = new util.HashMap[ActorRef, EntityId]()
|
private val byRef = new util.HashMap[ActorRef, EntityId]()
|
||||||
|
|
@ -323,7 +319,7 @@ private[akka] object Shard {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
def entityPassivating(entityId: EntityId): Unit = {
|
def entityPassivating(entityId: EntityId): Unit = {
|
||||||
if (VerboseDebug) log.debug("[{}] passivating", entityId)
|
if (verboseDebug) log.debug("[{}] passivating", entityId)
|
||||||
entities.get(entityId) match {
|
entities.get(entityId) match {
|
||||||
case wf: WithRef =>
|
case wf: WithRef =>
|
||||||
val state = entityState(entityId).transition(Passivating(wf.ref))
|
val state = entityState(entityId).transition(Passivating(wf.ref))
|
||||||
|
|
@ -410,6 +406,8 @@ private[akka] class Shard(
|
||||||
|
|
||||||
import akka.cluster.sharding.ShardCoordinator.Internal.CoordinatorMessage
|
import akka.cluster.sharding.ShardCoordinator.Internal.CoordinatorMessage
|
||||||
|
|
||||||
|
final val verboseDebug = context.system.settings.config.getBoolean("akka.cluster.sharding.verbose-debug-logging")
|
||||||
|
|
||||||
private val rememberEntitiesStore: Option[ActorRef] =
|
private val rememberEntitiesStore: Option[ActorRef] =
|
||||||
rememberEntitiesProvider.map { provider =>
|
rememberEntitiesProvider.map { provider =>
|
||||||
val store = context.actorOf(provider.shardStoreProps(shardId).withDeploy(Deploy.local), "RememberEntitiesStore")
|
val store = context.actorOf(provider.shardStoreProps(shardId).withDeploy(Deploy.local), "RememberEntitiesStore")
|
||||||
|
|
@ -419,7 +417,7 @@ private[akka] class Shard(
|
||||||
|
|
||||||
private val flightRecorder = ShardingFlightRecorder(context.system)
|
private val flightRecorder = ShardingFlightRecorder(context.system)
|
||||||
|
|
||||||
private val entities = new Entities(log, settings.rememberEntities)
|
private val entities = new Entities(log, settings.rememberEntities, verboseDebug)
|
||||||
|
|
||||||
private var lastMessageTimestamp = Map.empty[EntityId, Long]
|
private var lastMessageTimestamp = Map.empty[EntityId, Long]
|
||||||
|
|
||||||
|
|
@ -527,7 +525,7 @@ private[akka] class Shard(
|
||||||
case RememberEntityTimeout(GetEntities) =>
|
case RememberEntityTimeout(GetEntities) =>
|
||||||
loadingEntityIdsFailed()
|
loadingEntityIdsFailed()
|
||||||
case msg =>
|
case msg =>
|
||||||
if (VerboseDebug)
|
if (verboseDebug)
|
||||||
log.debug("Got msg of type [{}] from [{}] while waiting for remember entitites", msg.getClass, sender())
|
log.debug("Got msg of type [{}] from [{}] while waiting for remember entitites", msg.getClass, sender())
|
||||||
stash()
|
stash()
|
||||||
}
|
}
|
||||||
|
|
@ -597,7 +595,7 @@ private[akka] class Shard(
|
||||||
}
|
}
|
||||||
|
|
||||||
def sendToRememberStore(store: ActorRef, storingStarts: Set[EntityId], storingStops: Set[EntityId]): Unit = {
|
def sendToRememberStore(store: ActorRef, storingStarts: Set[EntityId], storingStops: Set[EntityId]): Unit = {
|
||||||
if (VerboseDebug)
|
if (verboseDebug)
|
||||||
log.debug(
|
log.debug(
|
||||||
"Remember update [{}] and stops [{}] triggered",
|
"Remember update [{}] and stops [{}] triggered",
|
||||||
storingStarts.mkString(", "),
|
storingStarts.mkString(", "),
|
||||||
|
|
@ -626,7 +624,7 @@ private[akka] class Shard(
|
||||||
// none of the current impls will send back a partial update, yet!
|
// none of the current impls will send back a partial update, yet!
|
||||||
case RememberEntitiesShardStore.UpdateDone(storedStarts, storedStops) =>
|
case RememberEntitiesShardStore.UpdateDone(storedStarts, storedStops) =>
|
||||||
val duration = System.nanoTime() - startTimeNanos
|
val duration = System.nanoTime() - startTimeNanos
|
||||||
if (VerboseDebug)
|
if (verboseDebug)
|
||||||
log.debug(
|
log.debug(
|
||||||
"Update done for ids, started [{}], stopped [{}]. Duration {} ms",
|
"Update done for ids, started [{}], stopped [{}]. Duration {} ms",
|
||||||
storedStarts.mkString(", "),
|
storedStarts.mkString(", "),
|
||||||
|
|
@ -647,7 +645,7 @@ private[akka] class Shard(
|
||||||
case l: LeaseLost => receiveLeaseLost(l)
|
case l: LeaseLost => receiveLeaseLost(l)
|
||||||
case ack: ShardRegion.StartEntityAck => receiveStartEntityAck(ack)
|
case ack: ShardRegion.StartEntityAck => receiveStartEntityAck(ack)
|
||||||
case ShardRegion.Passivate(stopMessage) =>
|
case ShardRegion.Passivate(stopMessage) =>
|
||||||
if (VerboseDebug)
|
if (verboseDebug)
|
||||||
log.debug(
|
log.debug(
|
||||||
"Passivation of [{}] arrived while updating",
|
"Passivation of [{}] arrived while updating",
|
||||||
entities.entityId(sender()).getOrElse(s"Unknown actor ${sender()}"))
|
entities.entityId(sender()).getOrElse(s"Unknown actor ${sender()}"))
|
||||||
|
|
@ -699,13 +697,13 @@ private[akka] class Shard(
|
||||||
|
|
||||||
val (pendingStarts, pendingStops) = entities.pendingRememberEntities()
|
val (pendingStarts, pendingStops) = entities.pendingRememberEntities()
|
||||||
if (pendingStarts.isEmpty && pendingStops.isEmpty) {
|
if (pendingStarts.isEmpty && pendingStops.isEmpty) {
|
||||||
if (VerboseDebug) log.debug("Update complete, no pending updates, going to idle")
|
if (verboseDebug) log.debug("Update complete, no pending updates, going to idle")
|
||||||
unstashAll()
|
unstashAll()
|
||||||
context.become(idle)
|
context.become(idle)
|
||||||
} else {
|
} else {
|
||||||
// Note: no unstashing as long as we are batching, is that a problem?
|
// Note: no unstashing as long as we are batching, is that a problem?
|
||||||
val pendingStartIds = pendingStarts.keySet
|
val pendingStartIds = pendingStarts.keySet
|
||||||
if (VerboseDebug)
|
if (verboseDebug)
|
||||||
log.debug(
|
log.debug(
|
||||||
"Update complete, pending updates, doing another write. Starts [{}], stops [{}]",
|
"Update complete, pending updates, doing another write. Starts [{}], stops [{}]",
|
||||||
pendingStartIds.mkString(", "),
|
pendingStartIds.mkString(", "),
|
||||||
|
|
@ -733,11 +731,11 @@ private[akka] class Shard(
|
||||||
case RestartTerminatedEntity(entityId) =>
|
case RestartTerminatedEntity(entityId) =>
|
||||||
entities.entityState(entityId) match {
|
entities.entityState(entityId) match {
|
||||||
case WaitingForRestart =>
|
case WaitingForRestart =>
|
||||||
if (VerboseDebug) log.debug("Restarting entity unexpectedly terminated entity [{}]", entityId)
|
if (verboseDebug) log.debug("Restarting entity unexpectedly terminated entity [{}]", entityId)
|
||||||
getOrCreateEntity(entityId)
|
getOrCreateEntity(entityId)
|
||||||
case Active(_) =>
|
case Active(_) =>
|
||||||
// it up could already have been started, that's fine
|
// it up could already have been started, that's fine
|
||||||
if (VerboseDebug) log.debug("Got RestartTerminatedEntity for [{}] but it is already running")
|
if (verboseDebug) log.debug("Got RestartTerminatedEntity for [{}] but it is already running")
|
||||||
case other =>
|
case other =>
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
s"Unexpected state for [$entityId] when getting RestartTerminatedEntity: [$other]")
|
s"Unexpected state for [$entityId] when getting RestartTerminatedEntity: [$other]")
|
||||||
|
|
@ -814,7 +812,7 @@ private[akka] class Shard(
|
||||||
|
|
||||||
def receiveShardQuery(msg: ShardQuery): Unit = msg match {
|
def receiveShardQuery(msg: ShardQuery): Unit = msg match {
|
||||||
case GetCurrentShardState =>
|
case GetCurrentShardState =>
|
||||||
if (VerboseDebug)
|
if (verboseDebug)
|
||||||
log.debug("GetCurrentShardState, full state: [{}], active: [{}]", entities, entities.activeEntityIds())
|
log.debug("GetCurrentShardState, full state: [{}], active: [{}]", entities, entities.activeEntityIds())
|
||||||
sender() ! CurrentShardState(shardId, entities.activeEntityIds())
|
sender() ! CurrentShardState(shardId, entities.activeEntityIds())
|
||||||
case GetShardStats => sender() ! ShardStats(shardId, entities.size)
|
case GetShardStats => sender() ! ShardStats(shardId, entities.size)
|
||||||
|
|
@ -865,7 +863,7 @@ private[akka] class Shard(
|
||||||
}
|
}
|
||||||
entities.entityState(entityId) match {
|
entities.entityState(entityId) match {
|
||||||
case RememberingStop(_) =>
|
case RememberingStop(_) =>
|
||||||
if (VerboseDebug)
|
if (verboseDebug)
|
||||||
log.debug("Stop of [{}] arrived, already is among the pending stops", entityId)
|
log.debug("Stop of [{}] arrived, already is among the pending stops", entityId)
|
||||||
case Active(_) =>
|
case Active(_) =>
|
||||||
log.debug("Entity [{}] stopped without passivating, will restart after backoff", entityId)
|
log.debug("Entity [{}] stopped without passivating, will restart after backoff", entityId)
|
||||||
|
|
@ -876,7 +874,7 @@ private[akka] class Shard(
|
||||||
case Passivating(_) =>
|
case Passivating(_) =>
|
||||||
if (entities.pendingRememberedEntitiesExist()) {
|
if (entities.pendingRememberedEntitiesExist()) {
|
||||||
// will go in next batch update
|
// will go in next batch update
|
||||||
if (VerboseDebug)
|
if (verboseDebug)
|
||||||
log.debug(
|
log.debug(
|
||||||
"Stop of [{}] after passivating, arrived while updating, adding it to batch of pending stops",
|
"Stop of [{}] after passivating, arrived while updating, adding it to batch of pending stops",
|
||||||
entityId)
|
entityId)
|
||||||
|
|
@ -904,7 +902,7 @@ private[akka] class Shard(
|
||||||
log.debug("Passivation when there are buffered messages for [{}], ignoring", id)
|
log.debug("Passivation when there are buffered messages for [{}], ignoring", id)
|
||||||
// FIXME should we buffer the stop message then?
|
// FIXME should we buffer the stop message then?
|
||||||
} else {
|
} else {
|
||||||
if (VerboseDebug)
|
if (verboseDebug)
|
||||||
log.debug("Passivation started for [{}]", id)
|
log.debug("Passivation started for [{}]", id)
|
||||||
entities.entityPassivating(id)
|
entities.entityPassivating(id)
|
||||||
entity ! stopMessage
|
entity ! stopMessage
|
||||||
|
|
@ -961,25 +959,25 @@ private[akka] class Shard(
|
||||||
|
|
||||||
// we can only start a new entity if we are not currently waiting for another write
|
// we can only start a new entity if we are not currently waiting for another write
|
||||||
if (entities.pendingRememberedEntitiesExist()) {
|
if (entities.pendingRememberedEntitiesExist()) {
|
||||||
if (VerboseDebug)
|
if (verboseDebug)
|
||||||
log.debug("StartEntity({}) from [{}], adding to batch", start.entityId, snd)
|
log.debug("StartEntity({}) from [{}], adding to batch", start.entityId, snd)
|
||||||
entities.rememberingStart(entityId, ackTo = Some(snd))
|
entities.rememberingStart(entityId, ackTo = Some(snd))
|
||||||
} else {
|
} else {
|
||||||
if (VerboseDebug)
|
if (verboseDebug)
|
||||||
log.debug("StartEntity({}) from [{}], starting", start.entityId, snd)
|
log.debug("StartEntity({}) from [{}], starting", start.entityId, snd)
|
||||||
startEntity(start.entityId, Some(sender()))
|
startEntity(start.entityId, Some(sender()))
|
||||||
}
|
}
|
||||||
case _ =>
|
case _ =>
|
||||||
entities.entityState(entityId) match {
|
entities.entityState(entityId) match {
|
||||||
case Active(ref) =>
|
case Active(ref) =>
|
||||||
if (VerboseDebug)
|
if (verboseDebug)
|
||||||
log.debug("Delivering message of type [{}] to [{}]", payload.getClass, entityId)
|
log.debug("Delivering message of type [{}] to [{}]", payload.getClass, entityId)
|
||||||
touchLastMessageTimestamp(entityId)
|
touchLastMessageTimestamp(entityId)
|
||||||
ref.tell(payload, snd)
|
ref.tell(payload, snd)
|
||||||
case RememberingStart(_) | RememberingStop(_) | Passivating(_) =>
|
case RememberingStart(_) | RememberingStop(_) | Passivating(_) =>
|
||||||
appendToMessageBuffer(entityId, msg, snd)
|
appendToMessageBuffer(entityId, msg, snd)
|
||||||
case state @ (WaitingForRestart | RememberedButNotCreated) =>
|
case state @ (WaitingForRestart | RememberedButNotCreated) =>
|
||||||
if (VerboseDebug)
|
if (verboseDebug)
|
||||||
log.debug(
|
log.debug(
|
||||||
"Delivering message of type [{}] to [{}] (starting because [{}])",
|
"Delivering message of type [{}] to [{}] (starting because [{}])",
|
||||||
payload.getClass,
|
payload.getClass,
|
||||||
|
|
@ -991,7 +989,7 @@ private[akka] class Shard(
|
||||||
case NoState =>
|
case NoState =>
|
||||||
if (entities.pendingRememberedEntitiesExist()) {
|
if (entities.pendingRememberedEntitiesExist()) {
|
||||||
// No actor running and write in progress for some other entity id (can only happen with remember entities enabled)
|
// No actor running and write in progress for some other entity id (can only happen with remember entities enabled)
|
||||||
if (VerboseDebug)
|
if (verboseDebug)
|
||||||
log.debug(
|
log.debug(
|
||||||
"Buffer message [{}] to [{}] (which is not started) because of write in progress for [{}]",
|
"Buffer message [{}] to [{}] (which is not started) because of write in progress for [{}]",
|
||||||
payload.getClass,
|
payload.getClass,
|
||||||
|
|
@ -1001,7 +999,7 @@ private[akka] class Shard(
|
||||||
entities.rememberingStart(entityId, ackTo = None)
|
entities.rememberingStart(entityId, ackTo = None)
|
||||||
} else {
|
} else {
|
||||||
// No actor running and no write in progress, start actor and deliver message when started
|
// No actor running and no write in progress, start actor and deliver message when started
|
||||||
if (VerboseDebug)
|
if (verboseDebug)
|
||||||
log.debug("Buffering message [{}] to [{}] and starting actor", payload.getClass, entityId)
|
log.debug("Buffering message [{}] to [{}] and starting actor", payload.getClass, entityId)
|
||||||
appendToMessageBuffer(entityId, msg, snd)
|
appendToMessageBuffer(entityId, msg, snd)
|
||||||
entities.rememberingStart(entityId, ackTo = None)
|
entities.rememberingStart(entityId, ackTo = None)
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ class ClusterShardingInternalsSpec extends AkkaSpec("""
|
||||||
|akka.remote.classic.netty.tcp.port = 0
|
|akka.remote.classic.netty.tcp.port = 0
|
||||||
|akka.remote.artery.canonical.port = 0
|
|akka.remote.artery.canonical.port = 0
|
||||||
|akka.loglevel = DEBUG
|
|akka.loglevel = DEBUG
|
||||||
|
|akka.cluster.sharding.verbose-debug-logging = on
|
||||||
|akka.loggers = ["akka.testkit.SilenceAllTestEventListener"]
|
|akka.loggers = ["akka.testkit.SilenceAllTestEventListener"]
|
||||||
|""".stripMargin) with WithLogCapturing {
|
|""".stripMargin) with WithLogCapturing {
|
||||||
import ClusterShardingInternalsSpec._
|
import ClusterShardingInternalsSpec._
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ object ClusterShardingLeaseSpec {
|
||||||
distributed-data.durable {
|
distributed-data.durable {
|
||||||
keys = []
|
keys = []
|
||||||
}
|
}
|
||||||
|
verbose-debug-logging = on
|
||||||
}
|
}
|
||||||
""").withFallback(TestLease.config)
|
""").withFallback(TestLease.config)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ object ConcurrentStartupShardingSpec {
|
||||||
akka.remote.artery.canonical.port = 0
|
akka.remote.artery.canonical.port = 0
|
||||||
akka.log-dead-letters = off
|
akka.log-dead-letters = off
|
||||||
akka.log-dead-letters-during-shutdown = off
|
akka.log-dead-letters-during-shutdown = off
|
||||||
|
akka.cluster.sharding.verbose-debug-logging = on
|
||||||
akka.actor {
|
akka.actor {
|
||||||
default-dispatcher {
|
default-dispatcher {
|
||||||
executor = "fork-join-executor"
|
executor = "fork-join-executor"
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ object CoordinatedShutdownShardingSpec {
|
||||||
akka.actor.provider = "cluster"
|
akka.actor.provider = "cluster"
|
||||||
akka.remote.classic.netty.tcp.port = 0
|
akka.remote.classic.netty.tcp.port = 0
|
||||||
akka.remote.artery.canonical.port = 0
|
akka.remote.artery.canonical.port = 0
|
||||||
|
akka.cluster.sharding.verbose-debug-logging = on
|
||||||
"""
|
"""
|
||||||
|
|
||||||
val extractEntityId: ShardRegion.ExtractEntityId = {
|
val extractEntityId: ShardRegion.ExtractEntityId = {
|
||||||
|
|
|
||||||
|
|
@ -5,15 +5,13 @@
|
||||||
package akka.cluster.sharding
|
package akka.cluster.sharding
|
||||||
import akka.actor.ActorRef
|
import akka.actor.ActorRef
|
||||||
import akka.cluster.sharding
|
import akka.cluster.sharding
|
||||||
import akka.cluster.sharding.Shard.{
|
import akka.cluster.sharding.Shard.Active
|
||||||
Active,
|
import akka.cluster.sharding.Shard.NoState
|
||||||
NoState,
|
import akka.cluster.sharding.Shard.Passivating
|
||||||
Passivating,
|
import akka.cluster.sharding.Shard.PassivationComplete
|
||||||
PassivationComplete,
|
import akka.cluster.sharding.Shard.RememberedButNotCreated
|
||||||
RememberedButNotCreated,
|
import akka.cluster.sharding.Shard.RememberingStart
|
||||||
RememberingStart,
|
import akka.cluster.sharding.Shard.RememberingStop
|
||||||
RememberingStop
|
|
||||||
}
|
|
||||||
import akka.event.NoLogging
|
import akka.event.NoLogging
|
||||||
import akka.util.OptionVal
|
import akka.util.OptionVal
|
||||||
import org.scalatest.matchers.should.Matchers
|
import org.scalatest.matchers.should.Matchers
|
||||||
|
|
@ -21,15 +19,18 @@ import org.scalatest.wordspec.AnyWordSpec
|
||||||
|
|
||||||
class EntitiesSpec extends AnyWordSpec with Matchers {
|
class EntitiesSpec extends AnyWordSpec with Matchers {
|
||||||
|
|
||||||
|
private def newEntities(rememberingEntities: Boolean) =
|
||||||
|
new sharding.Shard.Entities(NoLogging, rememberingEntities = rememberingEntities, false)
|
||||||
|
|
||||||
"Entities" should {
|
"Entities" should {
|
||||||
"start empty" in {
|
"start empty" in {
|
||||||
val entities = new sharding.Shard.Entities(NoLogging, rememberingEntities = false)
|
val entities = newEntities(rememberingEntities = false)
|
||||||
entities.activeEntityIds() shouldEqual Set.empty
|
entities.activeEntityIds() shouldEqual Set.empty
|
||||||
entities.size shouldEqual 0
|
entities.size shouldEqual 0
|
||||||
entities.activeEntities() shouldEqual Set.empty
|
entities.activeEntities() shouldEqual Set.empty
|
||||||
}
|
}
|
||||||
"set already remembered entities to state RememberedButNotStarted" in {
|
"set already remembered entities to state RememberedButNotStarted" in {
|
||||||
val entities = new sharding.Shard.Entities(NoLogging, rememberingEntities = true)
|
val entities = newEntities(rememberingEntities = true)
|
||||||
val ids = Set("a", "b", "c")
|
val ids = Set("a", "b", "c")
|
||||||
entities.alreadyRemembered(ids)
|
entities.alreadyRemembered(ids)
|
||||||
entities.activeEntities() shouldEqual Set.empty
|
entities.activeEntities() shouldEqual Set.empty
|
||||||
|
|
@ -39,7 +40,7 @@ class EntitiesSpec extends AnyWordSpec with Matchers {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"set state to remembering start" in {
|
"set state to remembering start" in {
|
||||||
val entities = new sharding.Shard.Entities(NoLogging, rememberingEntities = true)
|
val entities = newEntities(rememberingEntities = true)
|
||||||
entities.rememberingStart("a", None)
|
entities.rememberingStart("a", None)
|
||||||
entities.entityState("a") shouldEqual RememberingStart(None)
|
entities.entityState("a") shouldEqual RememberingStart(None)
|
||||||
entities.pendingRememberedEntitiesExist() should ===(true)
|
entities.pendingRememberedEntitiesExist() should ===(true)
|
||||||
|
|
@ -53,7 +54,7 @@ class EntitiesSpec extends AnyWordSpec with Matchers {
|
||||||
entities.pendingRememberEntities()._1 should be(empty)
|
entities.pendingRememberEntities()._1 should be(empty)
|
||||||
}
|
}
|
||||||
"set state to remembering stop" in {
|
"set state to remembering stop" in {
|
||||||
val entities = new sharding.Shard.Entities(NoLogging, rememberingEntities = true)
|
val entities = newEntities(rememberingEntities = true)
|
||||||
entities.addEntity("a", ActorRef.noSender) // need to go through active to passivate
|
entities.addEntity("a", ActorRef.noSender) // need to go through active to passivate
|
||||||
entities.entityPassivating("a") // need to go through passivate to remember stop
|
entities.entityPassivating("a") // need to go through passivate to remember stop
|
||||||
entities.rememberingStop("a", PassivationComplete)
|
entities.rememberingStop("a", PassivationComplete)
|
||||||
|
|
@ -70,7 +71,7 @@ class EntitiesSpec extends AnyWordSpec with Matchers {
|
||||||
}
|
}
|
||||||
|
|
||||||
"fully remove an entity" in {
|
"fully remove an entity" in {
|
||||||
val entities = new sharding.Shard.Entities(NoLogging, rememberingEntities = true)
|
val entities = newEntities(rememberingEntities = true)
|
||||||
val ref = ActorRef.noSender
|
val ref = ActorRef.noSender
|
||||||
entities.addEntity("a", ref)
|
entities.addEntity("a", ref)
|
||||||
entities.entityPassivating("a") // needs to go through passivating to be removed
|
entities.entityPassivating("a") // needs to go through passivating to be removed
|
||||||
|
|
@ -81,19 +82,19 @@ class EntitiesSpec extends AnyWordSpec with Matchers {
|
||||||
|
|
||||||
}
|
}
|
||||||
"add an entity as active" in {
|
"add an entity as active" in {
|
||||||
val entities = new sharding.Shard.Entities(NoLogging, false)
|
val entities = newEntities(rememberingEntities = false)
|
||||||
val ref = ActorRef.noSender
|
val ref = ActorRef.noSender
|
||||||
entities.addEntity("a", ref)
|
entities.addEntity("a", ref)
|
||||||
entities.entityState("a") shouldEqual Active(ref)
|
entities.entityState("a") shouldEqual Active(ref)
|
||||||
}
|
}
|
||||||
"look up actor ref by id" in {
|
"look up actor ref by id" in {
|
||||||
val entities = new sharding.Shard.Entities(NoLogging, false)
|
val entities = newEntities(rememberingEntities = false)
|
||||||
val ref = ActorRef.noSender
|
val ref = ActorRef.noSender
|
||||||
entities.addEntity("a", ref)
|
entities.addEntity("a", ref)
|
||||||
entities.entityId(ref) shouldEqual OptionVal.Some("a")
|
entities.entityId(ref) shouldEqual OptionVal.Some("a")
|
||||||
}
|
}
|
||||||
"set state to passivating" in {
|
"set state to passivating" in {
|
||||||
val entities = new sharding.Shard.Entities(NoLogging, false)
|
val entities = newEntities(rememberingEntities = false)
|
||||||
val ref = ActorRef.noSender
|
val ref = ActorRef.noSender
|
||||||
entities.addEntity("a", ref)
|
entities.addEntity("a", ref)
|
||||||
entities.entityPassivating("a")
|
entities.entityPassivating("a")
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ object InactiveEntityPassivationSpec {
|
||||||
akka.actor.provider = "cluster"
|
akka.actor.provider = "cluster"
|
||||||
akka.remote.classic.netty.tcp.port = 0
|
akka.remote.classic.netty.tcp.port = 0
|
||||||
akka.remote.artery.canonical.port = 0
|
akka.remote.artery.canonical.port = 0
|
||||||
|
akka.cluster.sharding.verbose-debug-logging = on
|
||||||
""")
|
""")
|
||||||
|
|
||||||
val enabledConfig = ConfigFactory.parseString("""
|
val enabledConfig = ConfigFactory.parseString("""
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ class JoinConfigCompatCheckShardingSpec extends AkkaSpec() with WithLogCapturing
|
||||||
akka.coordinated-shutdown.terminate-actor-system = on
|
akka.coordinated-shutdown.terminate-actor-system = on
|
||||||
akka.remote.classic.netty.tcp.port = 0
|
akka.remote.classic.netty.tcp.port = 0
|
||||||
akka.remote.artery.canonical.port = 0
|
akka.remote.artery.canonical.port = 0
|
||||||
|
akka.cluster.sharding.verbose-debug-logging = on
|
||||||
""")
|
""")
|
||||||
|
|
||||||
"A Joining Node" must {
|
"A Joining Node" must {
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,8 @@ object PersistentShardingMigrationSpec {
|
||||||
|
|
||||||
# make sure we test snapshots
|
# make sure we test snapshots
|
||||||
snapshot-after = 5
|
snapshot-after = 5
|
||||||
|
|
||||||
|
verbose-debug-logging = on
|
||||||
}
|
}
|
||||||
|
|
||||||
akka.persistence.journal.plugin = "akka.persistence.journal.leveldb"
|
akka.persistence.journal.plugin = "akka.persistence.journal.leveldb"
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@ object PersistentStartEntitySpec {
|
||||||
akka.remote.artery.canonical.port = 0
|
akka.remote.artery.canonical.port = 0
|
||||||
akka.remote.classic.netty.tcp.port = 0
|
akka.remote.classic.netty.tcp.port = 0
|
||||||
akka.persistence.journal.plugin = "akka.persistence.journal.inmem"
|
akka.persistence.journal.plugin = "akka.persistence.journal.inmem"
|
||||||
|
akka.cluster.sharding.verbose-debug-logging = on
|
||||||
""".stripMargin)
|
""".stripMargin)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ object ProxyShardingSpec {
|
||||||
akka.loggers = ["akka.testkit.SilenceAllTestEventListener"]
|
akka.loggers = ["akka.testkit.SilenceAllTestEventListener"]
|
||||||
akka.remote.classic.netty.tcp.port = 0
|
akka.remote.classic.netty.tcp.port = 0
|
||||||
akka.remote.artery.canonical.port = 0
|
akka.remote.artery.canonical.port = 0
|
||||||
|
akka.cluster.sharding.verbose-debug-logging = on
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,7 @@ object RememberEntitiesBatchedUpdatesSpec {
|
||||||
akka.cluster.sharding.remember-entities = on
|
akka.cluster.sharding.remember-entities = on
|
||||||
# no leaks between test runs thank you
|
# no leaks between test runs thank you
|
||||||
akka.cluster.sharding.distributed-data.durable.keys = []
|
akka.cluster.sharding.distributed-data.durable.keys = []
|
||||||
|
akka.cluster.sharding.verbose-debug-logging = on
|
||||||
""".stripMargin)
|
""".stripMargin)
|
||||||
}
|
}
|
||||||
class RememberEntitiesBatchedUpdatesSpec
|
class RememberEntitiesBatchedUpdatesSpec
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ object RememberEntitiesFailureSpec {
|
||||||
akka.cluster.sharding.shard-failure-backoff = 1s
|
akka.cluster.sharding.shard-failure-backoff = 1s
|
||||||
akka.cluster.sharding.coordinator-failure-backoff = 1s
|
akka.cluster.sharding.coordinator-failure-backoff = 1s
|
||||||
akka.cluster.sharding.updating-state-timeout = 1s
|
akka.cluster.sharding.updating-state-timeout = 1s
|
||||||
|
akka.cluster.sharding.verbose-debug-logging = on
|
||||||
""")
|
""")
|
||||||
|
|
||||||
class EntityActor extends Actor with ActorLogging {
|
class EntityActor extends Actor with ActorLogging {
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@ object RemoveInternalClusterShardingDataSpec {
|
||||||
akka.cluster.sharding.snapshot-after = 5
|
akka.cluster.sharding.snapshot-after = 5
|
||||||
akka.cluster.sharding.state-store-mode = persistence
|
akka.cluster.sharding.state-store-mode = persistence
|
||||||
akka.cluster.sharding.keep-nr-of-batches = 0
|
akka.cluster.sharding.keep-nr-of-batches = 0
|
||||||
|
akka.cluster.sharding.verbose-debug-logging = on
|
||||||
"""
|
"""
|
||||||
|
|
||||||
val extractEntityId: ShardRegion.ExtractEntityId = {
|
val extractEntityId: ShardRegion.ExtractEntityId = {
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ object ShardRegionSpec {
|
||||||
}
|
}
|
||||||
akka.cluster.downing-provider-class = akka.cluster.testkit.AutoDowning
|
akka.cluster.downing-provider-class = akka.cluster.testkit.AutoDowning
|
||||||
akka.cluster.jmx.enabled = off
|
akka.cluster.jmx.enabled = off
|
||||||
|
akka.cluster.sharding.verbose-debug-logging = on
|
||||||
"""))
|
"""))
|
||||||
|
|
||||||
val shardTypeName = "Caat"
|
val shardTypeName = "Caat"
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ object ShardWithLeaseSpec {
|
||||||
heartbeat-timeout = 120s
|
heartbeat-timeout = 120s
|
||||||
lease-operation-timeout = 3s
|
lease-operation-timeout = 3s
|
||||||
}
|
}
|
||||||
|
akka.cluster.sharding.verbose-debug-logging = on
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class EntityActor extends Actor with ActorLogging {
|
class EntityActor extends Actor with ActorLogging {
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ object SupervisionSpec {
|
||||||
akka.remote.classic.netty.tcp.port = 0
|
akka.remote.classic.netty.tcp.port = 0
|
||||||
akka.loggers = ["akka.testkit.SilenceAllTestEventListener"]
|
akka.loggers = ["akka.testkit.SilenceAllTestEventListener"]
|
||||||
akka.loglevel = DEBUG
|
akka.loglevel = DEBUG
|
||||||
|
akka.cluster.sharding.verbose-debug-logging = on
|
||||||
""")
|
""")
|
||||||
|
|
||||||
case class Msg(id: Long, msg: Any)
|
case class Msg(id: Long, msg: Any)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue