Skip to content

DAOS-19644 cart: Add multiprovider design document - #19092

Open
frostedcmos wants to merge 3 commits into
masterfrom
frostedcmos/multiprovider-design-doc
Open

frostedcmos wants to merge 3 commits into
masterfrom
frostedcmos/multiprovider-design-doc

Conversation

@frostedcmos

Copy link
Copy Markdown
Contributor
  • Add multiprovider design doc

Steps for the author:

  • Commit message follows the guidelines.
  • Appropriate Features or Test-tag pragmas were used.
  • Appropriate Functional Test Stages were run.
  • At least two positive code reviews including at least one code owner from each category referenced in the PR.
  • Testing is complete. If necessary, forced-landing label added and a reason added in a comment.

After all prior steps are complete:

  • Gatekeeper requested (daos-gatekeeper added as a reviewer).

- Add multiprovider design doc

Signed-off-by: Alexander A Oganezov <alexander.oganezov@hpe.com>
@frostedcmos
frostedcmos requested a review from a team as a code owner September 16, 2026 16:16
@github-actions

github-actions Bot commented Sep 16, 2026

Copy link
Copy Markdown

Ticket title is 'Add multi-provider design document to github in .md format'
Status is 'In Progress'
https://daosio.atlassian.net/browse/DAOS-19644

@soumagne

Copy link
Copy Markdown
Collaborator

You should move that doc to docs in my opinion instead of having it in the root directory. If you move it to docs/design that should not be visible in the main website unless someone adds a link to the page.

@kjacque kjacque left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a few comments.

Comment thread design/multi_provider/multi-provider-design-doc.md Outdated
Comment thread design/multi_provider/multi-provider-design-doc.md Outdated
Comment thread design/multi_provider/multi-provider-design-doc.md Outdated
Comment thread design/multi_provider/multi-provider-design-doc.md Outdated
Comment thread design/multi_provider/multi-provider-design-doc.md Outdated
@Michael-Hennecke

Copy link
Copy Markdown
Collaborator

You should move that doc to docs in my opinion instead of having it in the root directory. If you move it to docs/design that should not be visible in the main website unless someone adds a link to the page.

/design is the agreed location to put these, not under /docs. we don't want the designs to show up on the docs website (even if they aren't linked to the navigation bar, they would still be there...)


## 1. Summary

DAOS and CaRT currently assume a single fabric provider per deployment path. That limitation makes it difficult to run one DAOS deployment across multiple network fabrics or to support separate client populations that must reach the same servers through different providers.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"per deployment path" is confusing, this sounds like there may be multiple "deployment paths" within a single DAOS system? I believe that is impossible, and I would reword this as "per DAOS system".
And "difficult to run one DAOS deployment" should probably be "impossible to access one DAOS system"?


This design adds initial multi-provider support with one **primary** provider and one **secondary** provider. The primary provider remains the normal server execution and server-to-server communication path. The secondary provider is introduced as a client ingress path: requests received on the secondary provider are forwarded to the appropriate primary execution target inside the engine.

The result is a single DAOS deployment that can serve multiple client populations across different providers or network paths without requiring a separate DAOS instance per fabric.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DAOS deployment -> DAOS system
i would delete "without requiring a separate DAOS instance per fabric". such a thing would essentially bifurcate a single DAOS system into two disjoint ones ... we cannot have two engines (with two different fabric interfaces) access the same NVMe storage...


*Figure 1. Example topology with a primary CXI client cluster and a secondary TCP client cluster.*

![Example topology with same provider on different client clusters](multi-provider-design-doc-assets/image2.png)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

texts in the images are rendering really badly - change font or increase resolution?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i will see what i can do to make them better, copilot struggled few times to convert originals from the document

3. Preserve the existing primary-provider server execution model.
4. Minimize client-side changes required to use the secondary provider.
5. Keep the design extensible so future work can support more than two providers.

@Michael-Hennecke Michael-Hennecke Sep 17, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any goals for an admin node to talk to the servers using IP addresses that are configured on the same physical interface that's used for the secondary provider? or do we restrict admin nodes to the fabric of the primary provider (should be acceptable, just explicitly spell out the goal/non-goal)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tagging @kjacque for this question above

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The admin node talks exclusively over the control plane network, and from the control plane perspective, we use TCP over whatever route will allow us to reach an MS replica's IP. So it could in theory be routed over the secondary provider's network if that allows us to get to the MS replica. You could even bind the control plane to the secondary interface if desired. Not sure what the potential consequences of that are.

CRT_PROVIDER_SECONDARY=1
```

That should also be representable through CaRT initialization options so that the role choice is not environment-variable only.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

role -> provider ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a bit different from the provider. You could in theory have the same provider as primary and secondary, so this would be the selector of 'primary' vs 'secondary' roles.

- `port`

The configuration should also define the number of secondary ingress endpoints, for example `secondary_provider_endpoints`, with an initial default of `1`.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's unclear if a future extension to more than two providers would establish one primary and multiple secondary providers, or if the "ordered list" approach make the 3rd a tertiary provider, and what that difference would actually be?
implementation is OOS here, but we may want to make the wording/parameter naming more clear in such examples.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will clarify, current thinking is that in future we might have 1 primary and multiple secondary providers, each secondary provider is identified by the unique secondary provider index. There would be no difference in treatment between secondary providers

Secondary-provider support changes the DAOS data plane, not the management-plane transport.

The control-plane components, including `daos_server` and `daos_agent`, continue to communicate over the management network using gRPC over TCP. All server and client nodes therefore still need access to a shared management TCP network so that the agent can communicate with the server even when the data-plane provider selected for the client is not TCP.

@Michael-Hennecke Michael-Hennecke Sep 17, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This warrants more discussion, as we cannot require the existence of a physical TCP network for management traffic that is separate from the (primary or secondary) provider network.
In scenarios where management traffic uses an "IPoverIB" TCP connection over the high-speed fabric, we need to spell out what is supported as access_points in daos_agent.yml and as hostlist in daos_control.yml (and i assume we only want to support IP addresses on the primary fabric for mgmt_svc_replicas in daos_server.yml?)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tagging @kjacque for this as well

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From the control plane perspective, all we need is a network that can access the IP addresses listed as access_points/mgmt_svc_replicas in the config. Whether that is running over the primary or secondary fabric, or some third management network, isn't really the control plane's business, as long as there is some route from each client cluster to the MS IPs.

- Validate binding-bulk flows where control and data paths differ.

## 6. Compatibility and Interoperability

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should spell out the expected incompatibilities here. my understanding is that the wire protocol changes in a way that makes it incompatible with earlier DAOS versions?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will do, the main incompatibility is in bulks, where multiprovider support requires additional data to be transferred with each bulk handle identifying 'provider index' on which such bulk was originally created.


- Missing secondary-provider metadata.
- Mismatched provider ordering across configuration fields.
- Bulk transfer attempted across incompatible providers.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mismatched provider ordering across servers/engines?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not sure if this one needs to be called out separately. with two providers this would be same as mismatch of primary providers across servers and is not multiprovider specific

@Michael-Hennecke Michael-Hennecke left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

see inline comments...

Doc-only: true

Signed-off-by: Alexander A Oganezov <alexander.oganezov@hpe.com>
Doc-only: true

Signed-off-by: Alexander A Oganezov <alexander.oganezov@hpe.com>

@kjacque kjacque left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My concerns have been addressed. LGTM

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

4 participants