Skip to content

(1) absorb dataplane-quiescent#1539

Draft
daniel-noland wants to merge 1 commit into
mainfrom
pr/daniel-noland/concurrency-stack/1-absorb-quiescent
Draft

(1) absorb dataplane-quiescent#1539
daniel-noland wants to merge 1 commit into
mainfrom
pr/daniel-noland/concurrency-stack/1-absorb-quiescent

Conversation

@daniel-noland
Copy link
Copy Markdown
Collaborator

@daniel-noland daniel-noland commented May 15, 2026

Summary

  • Fold the dataplane-quiescent workspace member into dataplane-concurrency as concurrency::quiescent. Moves quiescent/src/lib.rs to concurrency/src/quiescent.rs, quiescent/src/slot.rs to concurrency/src/slot.rs, and the four integration tests under concurrency/tests/quiescent_*.rs.
  • Workspace Cargo.toml drops the quiescent member, dependency entry, and [workspace.metadata.package.quiescent] block.
  • .github/workflows/dev.yml retargets the miri/permissive and miri/strict jobs from dataplane-quiescent to dataplane-concurrency.
  • README content moves to concurrency/QUIESCENT.md and is included via #![doc = include_str!(...)].
  • justfile nextest filter: under loom, the legacy binary(loom) matcher no longer hits anything after this rename (the binary is now quiescent_loom); collapse to an empty filter so nextest walks every archived binary.

Pure code-motion -- no behaviour change, no new public surface. Sets up the subsequent PRs in the stack to layer the sync facade and backend wrappers onto the unified crate.

This is PR 1 of 3 in the concurrency facade stack:
1 absorb-quiescent -> 2 facade + backends + workspace sweep (#1542) -> 3 #[concurrency::test] + thread::scope (#1544).

Test plan

  • cargo nextest run -p dataplane-concurrency passes (same tests, new home).
  • cargo build --workspace after rebase onto main is clean.
  • .github/workflows/dev.yml miri job names match the new concurrency package.

@daniel-noland daniel-noland force-pushed the pr/daniel-noland/concurrency-stack/1-absorb-quiescent branch from 7672b6e to c87ff7f Compare May 15, 2026 21:22
@daniel-noland daniel-noland requested a review from Copilot May 15, 2026 21:57
@daniel-noland daniel-noland changed the title refactor(concurrency): absorb dataplane-quiescent (1) absorb dataplane-quiescent May 15, 2026
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Folds the dataplane-quiescent workspace member into dataplane-concurrency, moving quiescent/src/{lib,slot}.rs to concurrency/src/{quiescent,slot}.rs, the four integration tests under concurrency/tests/quiescent_*.rs, and the README to concurrency/QUIESCENT.md (included via #![doc = include_str!]). Workspace Cargo.toml, Cargo.lock, the miri jobs in .github/workflows/dev.yml, and the justfile nextest filter are retargeted accordingly. Sets up the subsequent PRs in the concurrency facade stack.

Changes:

  • Drop quiescent workspace member; absorb its sources/tests/README into dataplane-concurrency (adds arc-swap, bolero, static_assertions, _strict_provenance feature).
  • Retarget miri permissive/strict jobs and the loom test_package to dataplane-concurrency; collapse the loom nextest filter to empty.
  • Rewrite imports in absorbed sources/tests from concurrency::sync / dataplane_quiescent::* to crate::sync / dataplane_concurrency::quiescent::*.

Reviewed changes

Copilot reviewed 12 out of 14 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
Cargo.toml Drops quiescent member, dependency, and [workspace.metadata.package.quiescent] entry.
Cargo.lock Removes dataplane-quiescent; adds arc-swap/bolero/static_assertions to dataplane-concurrency.
concurrency/Cargo.toml Adds new deps and the _strict_provenance feature for the Mutex-based slot fallback.
concurrency/src/lib.rs Declares pub mod quiescent; and pub mod slot;.
concurrency/src/quiescent.rs Moved from quiescent/src/lib.rs; now uses crate::{slot,sync}; doc include points at QUIESCENT.md.
concurrency/src/slot.rs Moved from quiescent/src/slot.rs; switches to crate::sync and widens items from pub(crate) to pub.
concurrency/QUIESCENT.md Former README, included as the quiescent module docs; still references the old dataplane_quiescent crate path and tests/loom.rs.
concurrency/tests/quiescent_*.rs Imports updated to dataplane_concurrency::quiescent::*; module docstrings still reference old crate/file names.
quiescent/Cargo.toml Deleted (crate removed).
.github/workflows/dev.yml Miri permissive/strict jobs and loom test_package retargeted to dataplane-concurrency.
justfile Loom nextest filter dropped (legacy binary(loom) no longer matches the renamed binary).
Comments suppressed due to low confidence (1)

concurrency/tests/quiescent_loom.rs:44

  • After the move, the dataplane_quiescent references in this file's module docstring (lines 4-13: "for dataplane_quiescent", tests/protocol.rs, tests/properties.rs, tests/shuttle.rs, the example cargo test --release -p dataplane-quiescent --features loom --test loom) are stale. The package is now dataplane-concurrency, the test files are renamed quiescent_*, and this binary is quiescent_loom. The same stale crate-name/test-path references appear in the module docstrings of quiescent_protocol.rs, quiescent_properties.rs, and quiescent_shuttle.rs. Update them so the docs match reality.

Comment thread concurrency/src/lib.rs
`dataplane-quiescent` was a single-file QSBR primitive whose only
external dep was `dataplane-concurrency::sync`, and whose own
`Slot<T>` publication helper duplicated infrastructure that
`concurrency` would benefit from owning anyway. Merge the crate
in-tree so the primitive lives next to the sync types it builds on.

Moves (no functional change):

* `quiescent/src/lib.rs` -> `concurrency/src/quiescent.rs`. Imports
  rewritten from `concurrency::sync::...` to `crate::sync::...`;
  module-doc `#[doc = include_str!(...)]` retargeted at the relocated
  README.
* `quiescent/src/slot.rs` -> `concurrency/src/slot.rs`. Visibility
  bumped from `pub(crate)` to `pub` so callers outside the quiescent
  module can use it for their own publication patterns.
* `quiescent/README.md` -> `concurrency/QUIESCENT.md`. Surfaced as
  the module-level rustdoc.
* `quiescent/tests/{loom,protocol,properties,shuttle}.rs` ->
  `concurrency/tests/quiescent_*.rs`. Each integration test stays in
  its own compilation unit; imports rewritten to
  `dataplane_concurrency::...` (cargo rejects self-deps as
  dev-dependencies, so the workspace alias `concurrency` isn't
  available inside the crate's own integration tests).

Cargo:

* `arc-swap` and `static_assertions` become direct deps of
  `dataplane-concurrency` (previously they were transitive via
  `dataplane-quiescent`).
* `bolero` becomes a dev-dep for the property and shuttle tests.
* `_strict_provenance` feature carried over verbatim: forces the
  `Mutex<Arc<T>>` slot fallback for the miri-strict-provenance CI
  job, since `arc_swap`'s hazard pointers can't yet expose
  strict-provenance information.
* Workspace `Cargo.toml` drops the `quiescent` member and its
  `[workspace.metadata.package.quiescent]` block.

CI:

* `.github/workflows/dev.yml` renames the `quiescent/permissive` and
  `quiescent/strict` miri steps to `concurrency/permissive` and
  `concurrency/strict`; both now pass `--package=dataplane-concurrency`.
* The `features` matrix entry for `loom` retargets `test_package`
  from `quiescent` to `concurrency`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Daniel Noland <daniel@githedgehog.com>
@daniel-noland daniel-noland force-pushed the pr/daniel-noland/concurrency-stack/1-absorb-quiescent branch from c87ff7f to e292f12 Compare May 15, 2026 23:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants