Skip to content

Align packaging with side-by-side installs and amd64 tarball naming#1874

Merged
oferchen merged 2 commits into
masterfrom
support-side-by-side-installation-with-oc-rsync
Nov 1, 2025
Merged

Align packaging with side-by-side installs and amd64 tarball naming#1874
oferchen merged 2 commits into
masterfrom
support-side-by-side-installation-with-oc-rsync

Conversation

@oferchen
Copy link
Copy Markdown
Owner

@oferchen oferchen commented Nov 1, 2025

Summary

  • gate RPM alternative registration behind the same opt-in guard used for Debian packages so upstream rsync can remain active when both are installed
  • expose a dedicated amd64 architecture label for release tarballs and use it when naming the archive root
  • document the daemon configuration locations that ship with the packages so preflight checks pass and users can confirm coexistence paths

Testing

  • cargo test -p xtask

https://chatgpt.com/codex/tasks/task_e_6905ff49a6fc83239a9bc99990cc1703

@oferchen oferchen merged commit b658b86 into master Nov 1, 2025
@oferchen oferchen deleted the support-side-by-side-installation-with-oc-rsync branch November 1, 2025 12:47
oferchen added a commit that referenced this pull request May 2, 2026
Fixes fmt+clippy CI failure from the prior commit on this PR. No code
behavior changes, formatting only.
oferchen added a commit that referenced this pull request May 2, 2026
`revents` is i16 and `libc::POLLOUT` is `c_short` (i16) on Linux, so the
cast to i32 produced a `BitAnd<i16>` mismatch. Both sides are already
i16; remove the cast.
oferchen added a commit that referenced this pull request May 2, 2026
…1874)

clippy::useless_vec was triggered by `vec![false; N]` for fixed-size local
trackers in `many_interleaved_ops_demux_independently`. Switch to `[false; N]`
arrays so the test compiles under -D warnings.
oferchen added a commit that referenced this pull request May 2, 2026
* feat(fast_io): merge reader+writer onto shared io_uring (#1874)

Adds `SharedRing`, a single io_uring instance that services both a reader
fd and a writer fd in the same session. Submits `IORING_OP_READ` against
the registered reader fd and uses `IORING_OP_POLL_ADD` (POLLOUT) on the
writer fd so a slow consumer never blocks the shared CQ; the follow-up
`IORING_OP_SEND` is then queued only when the kernel signals readiness.
Completions are demuxed in arrival order via a 64-bit `user_data` tag
(`OpTag` in the high 8 bits, op_id in the low 56), mirroring the
io_loop+select() pattern in upstream rsync io.c:perform_io.

The new module is wired through the live `io_uring` module and the
non-Linux `io_uring_stub.rs` so callers can name the types unconditionally;
`SharedRing::try_new` returns `None` on kernels < 5.6, when seccomp blocks
the syscall, when the io_uring feature is off, or when the kernel does not
report `IORING_OP_POLL_ADD` in its probe set, leaving the existing
per-channel ring path and the standard buffered I/O path as the documented
fallbacks. The audit at docs/audits/shared-iouring-session-instance.md is
updated to mark step 4 of the rollout as shipped.

Tests in crates/fast_io/tests/io_uring_shared_ring.rs cover tag round-trip
on every platform, end-to-end read + poll-write + send concurrency on a
single ring under Linux (skipped at runtime when io_uring is unavailable),
interleaved demux of four reads with two polls, and confirmation that the
per-channel `socket_writer_from_fd` fallback continues to function while
the shared ring is in use.

* style(fast_io): apply cargo fmt to io_uring_shared_ring tests (#1874)

Fixes fmt+clippy CI failure from the prior commit on this PR. No code
behavior changes, formatting only.

* fix(fast_io): drop unnecessary i32 cast in POLLOUT bitand (#1874)

`revents` is i16 and `libc::POLLOUT` is `c_short` (i16) on Linux, so the
cast to i32 produced a `BitAnd<i16>` mismatch. Both sides are already
i16; remove the cast.

* fix(fast_io): use array literal instead of vec! in test seen-tracker (#1874)

clippy::useless_vec was triggered by `vec![false; N]` for fixed-size local
trackers in `many_interleaved_ops_demux_independently`. Switch to `[false; N]`
arrays so the test compiles under -D warnings.
oferchen added a commit that referenced this pull request May 5, 2026
* feat(fast_io): merge reader+writer onto shared io_uring (#1874)

Adds `SharedRing`, a single io_uring instance that services both a reader
fd and a writer fd in the same session. Submits `IORING_OP_READ` against
the registered reader fd and uses `IORING_OP_POLL_ADD` (POLLOUT) on the
writer fd so a slow consumer never blocks the shared CQ; the follow-up
`IORING_OP_SEND` is then queued only when the kernel signals readiness.
Completions are demuxed in arrival order via a 64-bit `user_data` tag
(`OpTag` in the high 8 bits, op_id in the low 56), mirroring the
io_loop+select() pattern in upstream rsync io.c:perform_io.

The new module is wired through the live `io_uring` module and the
non-Linux `io_uring_stub.rs` so callers can name the types unconditionally;
`SharedRing::try_new` returns `None` on kernels < 5.6, when seccomp blocks
the syscall, when the io_uring feature is off, or when the kernel does not
report `IORING_OP_POLL_ADD` in its probe set, leaving the existing
per-channel ring path and the standard buffered I/O path as the documented
fallbacks. The audit at docs/audits/shared-iouring-session-instance.md is
updated to mark step 4 of the rollout as shipped.

Tests in crates/fast_io/tests/io_uring_shared_ring.rs cover tag round-trip
on every platform, end-to-end read + poll-write + send concurrency on a
single ring under Linux (skipped at runtime when io_uring is unavailable),
interleaved demux of four reads with two polls, and confirmation that the
per-channel `socket_writer_from_fd` fallback continues to function while
the shared ring is in use.

* style(fast_io): apply cargo fmt to io_uring_shared_ring tests (#1874)

Fixes fmt+clippy CI failure from the prior commit on this PR. No code
behavior changes, formatting only.

* fix(fast_io): drop unnecessary i32 cast in POLLOUT bitand (#1874)

`revents` is i16 and `libc::POLLOUT` is `c_short` (i16) on Linux, so the
cast to i32 produced a `BitAnd<i16>` mismatch. Both sides are already
i16; remove the cast.

* fix(fast_io): use array literal instead of vec! in test seen-tracker (#1874)

clippy::useless_vec was triggered by `vec![false; N]` for fixed-size local
trackers in `many_interleaved_ops_demux_independently`. Switch to `[false; N]`
arrays so the test compiles under -D warnings.
oferchen added a commit that referenced this pull request May 7, 2026
Plan replaces std and tokio TcpStream halves in the daemon accept
loop with the io_uring socket reader/writer adapters once the shared
session ring (#1874) and per-session ring pool (#1936/#1937) land,
reusing the POLLOUT linked-timeout fix from #1872.
oferchen added a commit that referenced this pull request May 17, 2026
… (#4285)

Audits whether prerequisites for #1876 have landed and proposes
splitting the work into reviewable subtasks (#1876-a through e).

- #1874 (shared ring + POLL_ADD) shipped via PR #3553.
- #1937 (session ring pool) shipped via PR #4275.
- #1935 (hybrid tokio listener) shipped via PR #4278.
- No io_uring task carries id #1875; the original dependency note
  most plausibly meant the session-pool and listener work above.

Missing surface enumerated: pooled-ring constructors on the socket
adapters, daemon plumbing for SessionRingPool, sync and async worker
swaps, IORING_OP_LINK_TIMEOUT integration, and async-cancel
discipline. Trigger conditions (kernel >= 5.6, io_uring feature,
opt-in flag) and a five-step implementation plan included.
oferchen added a commit that referenced this pull request May 18, 2026
Plan replaces std and tokio TcpStream halves in the daemon accept
loop with the io_uring socket reader/writer adapters once the shared
session ring (#1874) and per-session ring pool (#1936/#1937) land,
reusing the POLLOUT linked-timeout fix from #1872.
oferchen added a commit that referenced this pull request May 18, 2026
… (#4285)

Audits whether prerequisites for #1876 have landed and proposes
splitting the work into reviewable subtasks (#1876-a through e).

- #1874 (shared ring + POLL_ADD) shipped via PR #3553.
- #1937 (session ring pool) shipped via PR #4275.
- #1935 (hybrid tokio listener) shipped via PR #4278.
- No io_uring task carries id #1875; the original dependency note
  most plausibly meant the session-pool and listener work above.

Missing surface enumerated: pooled-ring constructors on the socket
adapters, daemon plumbing for SessionRingPool, sync and async worker
swaps, IORING_OP_LINK_TIMEOUT integration, and async-cancel
discipline. Trigger conditions (kernel >= 5.6, io_uring feature,
opt-in flag) and a five-step implementation plan included.
oferchen added a commit that referenced this pull request May 18, 2026
… (#4285)

Audits whether prerequisites for #1876 have landed and proposes
splitting the work into reviewable subtasks (#1876-a through e).

- #1874 (shared ring + POLL_ADD) shipped via PR #3553.
- #1937 (session ring pool) shipped via PR #4275.
- #1935 (hybrid tokio listener) shipped via PR #4278.
- No io_uring task carries id #1875; the original dependency note
  most plausibly meant the session-pool and listener work above.

Missing surface enumerated: pooled-ring constructors on the socket
adapters, daemon plumbing for SessionRingPool, sync and async worker
swaps, IORING_OP_LINK_TIMEOUT integration, and async-cancel
discipline. Trigger conditions (kernel >= 5.6, io_uring feature,
opt-in flag) and a five-step implementation plan included.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant