Skip to content

dpd, MGS APIs marked server-side-versioned, but that's not valid #9708

@davepacheco

Description

@davepacheco

See #9704.

There are a few paths here, not wholly exclusive:

  • Make it client-side-versioned and fully implement RFD 567 (client-side-versioning).
  • Split this API into two: one that's server-side-versioned and used by Nexus; and one that's client-side-versioned and used by Sled Agent.
    • Pro: Nexus can still treat this as server-side-versioned.
    • Pro: Clearly reflects two different interfaces with different stability.
    • Con: Duplication at the API layer (two APIs with overlapping endpoints and types and not necessarily the same types). This probably wouldn't be too bad at first, but it could get unwieldy over time.
      This would only make sense if Sled Agent likely doesn't need new API versions from Dendrite. For example, if we keep rev'ing these APIs, but can still provide a compatible "shim" for sled agent indefinitely and it doesn't need the new parts, then this would work. But if it did need the new parts (say, new required arguments), this won't help. That said, it can't work at all for sled agent to need the new parts in the same release they're shipped precisely because old sled agents still exist talking to new dpd during an online update.
  • Update ls-apis (and the dropshot-api-manager? not sure if it cares) to support the idea that edges are determined to be server-side-versioned vs. client-side-versioned, rather than APIs themselves. The idea here would be that we don't need to have two different APIs, but the tool understands that Sled Agent treats it as client-side-versioned and Nexus treats it as server-side-versioned.

I'm increasingly convinced that we probably should do RFD 567, but that's also going to take time. Either of the other two options may buy us time here. But neither of those can solve the problem of actually wanting to ship changes to the Dendrite API in the same release that new Sled Agents use them. Only RFD 567 can do that.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions