m/n/core/curator: fix listener stuckness on restarts

This makes both gRPC listener runnables (local and public) manage their
own listening sockets, allowing them to restart independently of
eachother, and making sure that any listening sockets are cleaned up.

We also fix the existing curator test (which does not exercise the
listeners, just leadership election) to place the curators and their
local sockets in /tmp instead of the default bazel tempdir (as a path
based on that is longer than the maximum domain socket path). This makes
these tests slightly less noisy (as they kept crashing while not being
able to listen to the local socket).

This should've been caught by a curator listener test, if we had one
(other than the e2e test). I'm growing keen on spending some time
writing enough of a harness to actually do that. Maybe once we have a
follower implementation ready…

Change-Id: I0267292781b6ee8aff1d0557d420bbaa3c3d79f6
Reviewed-on: https://review.monogon.dev/c/monogon/+/304
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
2 files changed
tree: fafe3258a74a97171a9d11d917a19c2e7387db73
  1. build/
  2. intellij/
  3. metropolis/
  4. scripts/
  5. third_party/
  6. .bazelignore
  7. .bazelproject
  8. .bazelrc
  9. .git-ignore-revs
  10. .gitignore
  11. BUILD
  12. LICENSE
  13. README.md
  14. WORKSPACE
README.md

Monogon Monorepo

This is the main repository containing the source code for the Monogon Project.

⚠️ This is pre-release software that happens to be publicly available. Nothing to see here, please move along.

Environment

Our build environment requires a working Podman binary (your distribution should have one).

Usage

Spinning up: scripts/create_container.sh

Spinning down: scripts/destroy_container.sh

Running commands: scripts/run_in_container.sh <...>

Using bazel using a wrapper script: scripts/bin/bazel <...> (add to your local $PATH for convenience)

IntelliJ

This repository is compatible with the IntelliJ Bazel plugin, which enables full autocompletion for external dependencies and generated code. All commands run inside the container, and necessary paths are mapped into the container.

The following steps are necessary:

  • Install Google's Bazel plugin in IntelliJ. On IntelliJ 2020.3 or later, you need to install a beta release of the plugin.

  • Add the absolute path to your ~/.cache/bazel-monogon folder to your idea64.vmoptions (Help → Edit Custom VM Options) and restart IntelliJ:

    -Dbazel.bep.path=/home/leopold/.cache/bazel-monogon

  • Set "Bazel Binary Location" in Other Settings → Bazel Settings to the absolute path of scripts/bin/bazel. This is a wrapper that will execute Bazel inside the container.

  • Use File → Import Bazel project... to create a new project from .bazelproject.

After running the first sync, everything should now resolve in the IDE, including generated code.

Metropolis

Run a single node cluster

Launch the node:

scripts/bin/bazel run //:launch

Run a kubectl command:

scripts/bin/bazel run //metropolis/cli/dbg -- kubectl describe

Run tests:

scripts/bin/bazel test //...