Skip to content

Commit ab718d7

Browse files
committed
Add the first part of a multirack join service
Add a new multirack join service tokio task that runs inside the sled-agent on demand. It's run in the same manner as RSS, shares the same context, and is mutually exclusive with RSS. Two new bootstrap-agent-lockstep APIs were added in order to trigger a multirack join and get its ongoing status. Unlike RSS, a `MultirackJoinRequest` can be resent in the case of a typo, misconfiguration, or runtime error. In many cases this will allow the join process to correct itself without requiring a clean slate of the rack. This is all managed via input and output watch channels and therefore obviates the need for worrying about channel bounds. As this PR started to get large, I have only implemented the first part of the multirack join service which sets up the trust quorum. This was enough to validate the starting of the service, the watch channel plumbing, and the ability to correct mistakes in the `MultirackJoinRequest` that triggers the behavior of the service. In order to test this new API, I used [voxel](oxidecomputer/voxel#13) with a 2 rack configuration of 3 sleds each. On the second, non-RSS sled, I logged into `g3` and ran curl requests against the bootstrap-agent-lockstep server. In order to help this testing, I created a one off tool to generate example JSON output from a hardcoded configuration. I expect this to be useful for the remainder of the implementation and then removed once the implementation is complete. Another large chunk of this code is just integrating with the existing bootstrap agent, wicket, and wicketd functionality. This should remain static for the remainder of the implementation.
1 parent 98f39f7 commit ab718d7

25 files changed

Lines changed: 2045 additions & 272 deletions

File tree

Cargo.lock

Lines changed: 59 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,10 +150,12 @@ members = [
150150
"sled-agent/api",
151151
"sled-agent/bootstrap-agent-lockstep-api",
152152
"sled-agent/bootstrap-agent-lockstep-types",
153+
"sled-agent/bootstrap-common",
153154
"sled-agent/config-reconciler",
154155
"sled-agent/early-networking",
155156
"sled-agent/health-monitor",
156157
"sled-agent/measurements",
158+
"sled-agent/multirack-join",
157159
"sled-agent/rack-setup",
158160
"sled-agent/repo-depot-api",
159161
"sled-agent/scrimlet-reconcilers",
@@ -345,10 +347,12 @@ default-members = [
345347
"sled-agent/api",
346348
"sled-agent/bootstrap-agent-lockstep-api",
347349
"sled-agent/bootstrap-agent-lockstep-types",
350+
"sled-agent/bootstrap-common",
348351
"sled-agent/config-reconciler",
349352
"sled-agent/early-networking",
350353
"sled-agent/health-monitor",
351354
"sled-agent/measurements",
355+
"sled-agent/multirack-join",
352356
"sled-agent/rack-setup",
353357
"sled-agent/repo-depot-api",
354358
"sled-agent/scrimlet-reconcilers",
@@ -812,11 +816,13 @@ similar-asserts = "1.7.0"
812816
# server zones.
813817
sled = "=0.34.7"
814818
sled-agent-api = { path = "sled-agent/api" }
819+
sled-agent-bootstrap-common = { path = "sled-agent/bootstrap-common" }
815820
sled-agent-client = { path = "clients/sled-agent-client" }
816821
sled-agent-config-reconciler = { path = "sled-agent/config-reconciler" }
817822
sled-agent-early-networking = { path = "sled-agent/early-networking" }
818823
sled-agent-health-monitor = { path = "sled-agent/health-monitor" }
819824
sled-agent-measurements = { path = "sled-agent/measurements" }
825+
sled-agent-multirack-join = { path = "sled-agent/multirack-join" }
820826
sled-agent-rack-setup = { path = "sled-agent/rack-setup" }
821827
sled-agent-scrimlet-reconcilers = { path = "sled-agent/scrimlet-reconcilers" }
822828
sled-agent-types = { path = "sled-agent/types" }

0 commit comments

Comments
 (0)