| commit | d5cace605ffd48f89db25456b260c550621b8b4c | [log] [tgz] |
|---|---|---|
| author | Serge Bazanski <serge@monogon.tech> | Thu Jan 25 14:01:54 2024 +0100 |
| committer | Serge Bazanski <serge@monogon.tech> | Thu Jan 25 17:43:22 2024 +0000 |
| tree | 3a020de589b3931d069a29deebddbb47e1f41d7f | |
| parent | 961a7cc7f4794833f821a368b68d12ec70353d6c [diff] |
metropolis/node/curator: restart listener on status changes This change ensures that a Curator's gRPC listener restart not only when it switches from leader to follower (and vice versa), but also when the curator instance keeps being a leader/follower but the leadership status changes in an important way. Restarting the listener is important when the Curator is a re-elected leader, as otherwise the listener will continue running with the old leadership data which includes the old leadership election key/revision, subsequently failing any leadership transactions when serving gRPC requests. Similarly, we need to restart the follower listener when the we the leader changes to some other node, otherwise we end up serving old leadership data in GetCurrentLeader. An alternative fix would be to move the leadership status to an Event value that gets updated and passed through to the listeners. This would avoid somewhat unnecessary listener restarts on leadership changes, but this will do for now. This should fix issue #276 and perhaps some related flakiness. I'll try to write a test for this on top of this CR, but this will require a new kind of Curator test which we don't have yet. Change-Id: I20ef147adeb0c976b904ef55dbadb9b461111e94 Reviewed-on: https://review.monogon.dev/c/monogon/+/2722 Tested-by: Jenkins CI Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
This is the main repository containing the source code for the Monogon Platform.
This is pre-release software - take a look, and check back later!
Our build environment is self-contained and requires only minimal host dependencies:
/dev/kvm (if you want to run tests).Our docs assume that Bazelisk is available as bazel on your PATH.
Refer to SETUP.md for detailed instructions.
Build CLI and node image:
bazel build //metropolis/cli/dbg //:launch --config dbg
Launch an ephemeral test node:
bazel test //:launch --config dbg --test_output=streamed
Run a kubectl command while the test is running:
bazel-bin/metropolis/cli/dbg/dbg_/dbg kubectl describe node
Run full test suite:
bazel test --config dbg //...