Repository navigation
Conversation
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d394bf99bd
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| raise TransferTimeout("NIXL storage request timed out", wire_bytes=wire_bytes) | ||
| await asyncio.sleep(0.001) | ||
| response = reply.result() | ||
| except Exception as exc: |
There was a problem hiding this comment.
Treat cancelled writes as outcome-unknown after sending
When a PUT/UPDATE task is cancelled after send_notification but before the reply, asyncio.CancelledError inherits BaseException and therefore bypasses this except Exception; the storage unit may still apply the write while the caller sees only cancellation. A caller using asyncio.wait_for and retrying can consequently apply a non-idempotent UPDATE twice, so this post-send cancellation path needs to finish determining the outcome or surface WriteOutcomeUnknown just like the timeout path.
Useful? React with 👍 / 👎.
| logger.exception("NIXL storage request %s failed", request_id) | ||
| reply["error"] = str(exc)[:4096] | ||
| try: | ||
| packed = self._pack_control(reply) |
There was a problem hiding this comment.
Prevent oversized update acknowledgements after committing
When an UPDATE produces enough per-sample stored_shapes to make its reply exceed MAX_CONTROL_BYTES (1 MiB), _handle has already called apply_update before this packing attempt. _pack_control then falls into the outcome-unknown reply, so AsyncSimpleStorageManager.update_data raises before notify_data_update; for a newly added or shape-changing field, storage is committed while controller metadata remains stale. Large valid updates therefore deterministically leave the planes inconsistent; reject or preflight before applying, or carry the acknowledgement body outside the capped notification.
Useful? React with 👍 / 👎.
|
cc @Ginray |
Summary
This PR adds an opt-in NIXL payload backend for SimpleStorage. It introduces a common
PayloadTransferinterface so the Manager and StorageUnit can use either ZMQ multipart messages or NIXL notifications with UCX READ for PUT, GET, and UPDATE. The design follows the interface proposed in [RFC #208](#208).Design and implementation
PayloadTransfer. Both backends invoke the same StorageUnit handler for parsing, validation, reads, writes, and merges.To enable the NIXL backend: