Skip to content

Sled Agent POST /cockroachdb is not idempotent #3499

Closed
@davepacheco

Description

@davepacheco

After #2954, Sled Agent has a POST /cockroachdb API that initializes the control plane database. The current implementation is not idempotent, leading to #3498.

I also wrote:

There's another bit of this I'm a little worried about, which is exposing an API in sled agent to initialize the CockroachDB cluster. That seems a little dangerous and also overkill since we only ever intend to do this once, and only before the control plane is initialized. I considered changing this to instead have RSS pass configuration to an SMF service which would do this. The problem is that there's not a great way to propagate success/failure information back to RSS so that it can decide whether to proceed (or, I guess, burn down the world and try again). I'm going to defer fixing this for now because we really need to start playing with multi-node CockroachDB.

I think it's worth looking at the SMF option closer. This would solve a few issues:

  • it can't be called concurrently (which is good)
  • it can't be called by any component in the system at any time (which the current API can, which would almost never be valid)
  • it replaces an implicit interface between Sled Agent and the CockroachDB zone with a more explicit, well-defined one (see Sled Agent uses implicit interfaces with components it provisions #3407)

None of these affect idempotency per se, but I think this would give a better foundation for making it idempotent.

Metadata

Metadata

Assignees

Labels

apiRelated to the API.databaseRelated to database access

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions