* Improve default shard rebalancing algorithm, #26012
* Use rebalance-threshold=1 because it will give the best distribution,
and previous default could result in too large difference between nodes
* Off by one error, difference > threshold vs >=
* Added more unit tests
* Note that in some cases it may still not be optimal, stopping more
shards than necessary, but a different strategy that looks at more
than most and least is out of scope for this issue. In practise
those cases shouldn't matter much.
* Also note that the rebalance interval is by default 10 seconds,
so typically shards will start up before next rebalance tick.
It's intentionally a slow process to not cause instabilities by
moving too much at the same time.
* Added ActorTestKit#stop method and corresponding tests.
* Added 'Stopping actors' section to the docs
* Stop actor now waits until the actor terminates.
* Move empty state and increment logic into the State class
* Improve types in tapPersistentActor
* Extract CounterBehavior class
Tests override functionality as needed to make assertions.
* Use singleton enum pattern from Effective Java
This ensures that serialization/deserialization is handled correctly.
* Extract command handler methods from lambdas
* Inline special event values
This makes it easier to understand what it's doing.
Having this file at all was a workaround for a problem with building on jdk9
for jdk8, but I can no longer reproduce this problem.
See also https://github.com/akka/akka/pull/25326
Fixes#25825
Provides search domain support for Async DNS.
There are two parts here, first is the search domain support itself,
which is relatively straight forward - on lookup, create a list of hosts
to attempt to resolve based on the search domains configuration
(including the host with no postfix), exclude all those hosts that have
less dots than the configured ndots, and then search until you find one
that returns any records. In this case the search domains are applied for
each nameserver attempt, so if a particular nameserver times out, it
won't attempt to search any more domains on that nameserver.
The second part is in actually detecting the system configuration. I've
only implemented partial support here, it reads /etc/resolv.conf, and
nothing else. There are ways to detect it on other platforms, there are
also environment variables that are supposed to be honored on Linux and
other *nix's, but to keep this change manageable, I've focussed on just
supporting the minimum to meet the Kubernetes service discovery use case,
and documented the limitations.
* Setup different fix alias on different sub projects and add support to ignore dedicated packages when do scalafix.
Because some sub projects does not enable the MultiNode plugin.
Add ignore packages support for scalafix.
* Run scalafix to remove unused imports again.
* Add `reload` to `fixall` and `fix` command alias.
* Remove some unnecessary casts in WithMdcBehaviorInterceptor
* Reuse Behavior.same & Behavior.unhandled
* Introduce Behavior#unsafeCast (asInstanceOf alt)
Also introduce StoppedBehavior#cast, as a local, safe alternative.
The intended behavior is:
* don't gossip to node marked as unreachable by self (heartbeat
messages are not getting through so no point in trying to gossip).
* gossip is allowed to nodes marked as unreachable by others
This doesn't change anything from how it worked before, but I think the
original intention before the multi-dc changes was to not gossip to
unreachable at all no matter who marked them.