Repository navigation
Add the durable ioring and the Win32 layers under it - #159
Merged
Merged
Conversation
… take no release The crates that make no release on this branch: io-buffers, win-error-codes, win-numa-sys, win-pipes-sys, win-shared-os-owned-handle, win-volume-sys, windows-impersonation-token-sys, windows-namespace-request-sys, windows-overlapped-io-sys, windows-topology-sys and wtf-string. Their checklists, design notes and the refactors that came with the durable-ioring work, as they stand at the end of mikegrier/durable-ioring-squashed. Squashes: - chore: tests, docs and plans of the crates that take no release from the durable-ioring branch - docs(shared-handle): close SH-1+.1 -- every crate that wrapped Arc<OwnedHandle> now holds a SharedHandle - docs(win-volume-sys): move the completed milestones WV-M1 to WV-M3 to COMPLETED-CHECKLIST.md - docs(win-pipes-sys): migrate the completed WP-1 stubs out of CHECKLIST.md - docs(wtf-string): move the M-inf horizon into PARKED.md - docs(overlapped-io), docs(win-numa-sys): mark the reopened plans not started - docs: park what the completed checklists of the tail watcher and win-volume-sys have left Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…se a handle with its result, and duplicate with the access and inheritance chosen set_handle_information over SetHandleInformation, compare_object_handles over CompareObjectHandles, close_handle over CloseHandle taking an OwnedHandle and reporting the call's error, and duplicate_handle over DuplicateHandle with the access (the source's or a chosen mask) and the inheritance chosen. duplicate_handle_with_access is the same call with a mask and no inheritance, so the crate has one DuplicateHandle site. Decisions WH-D-3 to WH-D-6; the checklist is complete. Squashes: - feat(win-handles-sys): set a handle's flags with SetHandleInformation - feat(win-handles-sys): ask whether two handles name one kernel object with CompareObjectHandles - feat(win-handles-sys): close a handle and learn whether it closed with CloseHandle - feat(win-handles-sys): duplicate a handle with the access kept or chosen and its inheritance chosen Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ingOrdinal A memory-safe wrapper over CompareStringOrdinal for the ordinal, optionally case-folded comparison of two counted UTF-16 slices. It adds no policy; what a caller does with a refused length is the caller's (WT-D-2). The crate is registered in the workspace, the release manifest and the release config. Squashes: - feat(win-text-sys): new crate, compare_string_ordinal over CompareStringOrdinal Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…bugStringW, and a test-util debugger that keeps what a process sends output_debug_string over OutputDebugStringW, and under a test-util feature run_debugged, a debugger that launches a process and keeps the strings it sends to the debugger. The crate is registered in the workspace, the release manifest and the release config. Squashes: - feat(win-debugging-sys): new crate, output_debug_string over OutputDebugStringW - feat(win-debugging-sys): a test-util feature with run_debugged, a debugger that keeps what a process sends Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…provider functions, with activity ids A Registration over EventRegister, EventWrite and EventWriteTransfer, which takes an activity id and a related activity id from the caller so a begin and its end written on two threads carry one activity, and create_activity_id over EventActivityIdControl. A test-util session starts a trace session and reads what it recorded, each Recorded carrying its activity and related activity ids. The crate is registered in the workspace, the release manifest and the release config. Squashes: - feat(win-etw-sys): new crate, a Registration over the Event Tracing provider functions - feat(win-etw-sys): create an activity id with EventActivityIdControl - feat(win-etw-sys)!: write an event with an explicit activity id by EventWriteTransfer BREAKING CHANGE: Recorded gains two fields and is #[non_exhaustive]; WriteError's Display text changes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… operation is duplicate_wait_only An Event and a WaitOnlyEvent are Clone, and a clone shares the one handle through a win-shared-os-owned-handle SharedHandle, closed when the last holder drops. The conversions into SharedHandle and try_into_owned are added beside try_clone and the conversions into OwnedHandle, which stay until their dependents have moved. DuplicateHandle and the Access mask now come from win-handles-sys and are re-exported at the paths they had. Squashes: - feat(win-sync): an Event's clones share one handle, and the wait-only operation is duplicate_wait_only Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ilt from an Event shares its handle with the clones the caller keeps WaitableHandle::assume_waitable_shared takes a SharedHandle, held by the wait with every clone the caller keeps, and closed when the last holder drops. From<Event> for WaitableHandle builds such a shared target, so a caller keeps a clone of the Event to signal it once the wait holds it. The documentation on From<Event> and WaitableHandle::event says what into_handle returns for each. Squashes: - feat(threadpool): a wait target may be a SharedHandle, shared with the caller - fix(threadpool)!: state what a wait built from an Event is, and mark the breaking changes it came with - docs(threadpool): the milestone moves, the M-T14+ graduation and the archive repairs BREAKING CHANGE: From<Event> for WaitableHandle takes win-sync-sys' new Event, whose clones share one handle and which no longer converts to OwnedHandle, so it is not the Event type 0.3.0 accepted. A wait built from an Event is a shared target: WaitableHandle::into_handle returns the wrapper unchanged while any clone of the Event remains, where it returned the handle unconditionally. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… and the crate takes the request crate's path contract The completion ring holds its doorbell as a win_sync_sys::Event and sets and resets it through that type. Receiver::doorbell_owned, which returned a duplicate, is replaced by Receiver::doorbell_waitable, a WaitableHandle made from a clone of the ring's event, so a ThreadpoolWait shares the ring's handle and a client cannot set or reset it without unsafe. The crate anchors its paths through windows-namespace-request-sys' AnchoredPath and deletes its own path preparation, and opens and queries a directory through the request crate's entries. The case-insensitive name comparison is win-text-sys's compare_string_ordinal, and the crate forbids unsafe code. Squashes: - feat(file-enumeration)!: take the request crate's path contract and delete the older copy - feat(file-enumeration)!: the doorbell is a shared win-sync-sys Event, and doorbell_owned is doorbell_waitable - refactor(file-enumeration): the directory's open and queries are the request crate's entries - refactor(file-enumeration): the case-insensitive name comparison is win-text-sys's compare_string_ordinal - refactor(file-enumeration): the crate forbids unsafe code - docs(file-enumeration): park REVIEW-1, move the completed PATH and ERR milestones, and record the checklist complete BREAKING CHANGE: Receiver::doorbell_owned is removed and Receiver::doorbell_waitable, which returns a WaitableHandle sharing the ring's event, takes its place; the crate takes the request crate's path contract in place of its own path preparation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… job launcher and the queue, and land the ring and tail watcher plans windows-waitable-queues' doorbell and win-job-launcher's redirected standard handles make their same-process DuplicateHandle through win-handles-sys' duplicate_handle instead of their own calls, and windows-ioring-sys and win-multi-file-tail-watcher move their completed milestones to their archives and park what they leave. None of these makes a release. Squashes: - refactor(waitable-queues): duplicate the doorbell with win-handles-sys - refactor(win-job-launcher): duplicate the command's standard handles with win-handles-sys - docs(ioring-sys): move the completed milestones M31, M34, M40 and M41 to COMPLETED-CHECKLIST.md - docs(tail-watcher): move the completed milestones M2 to M10 to COMPLETED-CHECKLIST.md - docs: park what the completed checklists of the tail watcher and win-volume-sys have left Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The queue holds its doorbell as a win-shared-os-owned-handle SharedHandle, and Receiver::doorbell_shared returns one more owner of it: no new kernel handle, closed when the last holder drops, so a ThreadpoolWait can take it through assume_waitable_shared without a duplicate per consumer. doorbell and doorbell_owned are unchanged (D-87). The queue's doorbell duplicate is made by win-handles-sys' duplicate_handle, and a route's name comparison is win-text-sys's compare_string_ordinal. Squashes: - feat(file-watcher): hand out the receiver's doorbell as a shared handle - refactor(file-watcher): duplicate the queue doorbell with win-handles-sys - refactor(file-watcher): a route's name comparison is win-text-sys's compare_string_ordinal - docs(file-watcher): move the M-inf horizon into PARKED.md - chore: point SAFE-4 and M17.1 at the archived M43.1 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… placement name Each measurement carries its raw pass and a stable name for its placement, so a reader can compare runs without re-deriving either. Squashes: - feat(placement-probe): carry each measurement's raw pass and a stable placement name Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…mmand line, and the queue probe's smallest run no longer panics The probes' sampling is settable from the command line, and the queue probe's smallest run no longer panics for a capacity of one. Squashes: - feat(platform-probes): make the probes' sampling settable from the command line - fix(platform-probes): the queue probe's smallest run no longer panics for a capacity of one Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…y sink takes the begin/end pairs, and the ETW provider writes each pair as one activity durable-ioring, durable-ioring-events and win-durable-ioring in one commit because they changed together and none builds without the others: the core's target and submit traits gained a declared access, its diagnostics became begin/end pairs that the ETW provider and the driver's sinks consume, and the driver implements both. durable-ioring: a target states its access and the core refuses what it does not cover; the typed Key<A> carries it to the ring's submit methods. A seal, a flush part and a lock wait are each a pair of events joined by a CorrelationId, and PairingChecker is the one definition of what a correct producer emits. A sink assumes no begin for an end, and a fan-out hands every pair's end to every sink (DI-D-96). RoutingProvider dispatches each seal by flush domain. The in-memory backend's targets fault on a script. durable-ioring-events (new): the ETW provider and EtwDiagnostics. Each pair is written as one activity created by EventActivityIdControl and repeated on its end (DE-D-6), and text ends at its first zero so no later field is misread (DE-D-7). win-durable-ioring: file access is a typed set of named rights and data access is the type parameter of every handle the crate opens; a share mode is a typed set and a sharing violation a typed error; OpenedFile::open takes its path as a Wtf16String and the disposition is Win32's own. DebugOutputDiagnostics writes each event to the debugger, and the default sink is EtwDiagnostics. Squashes: - feat(durable-ioring)!: a typed Key<A> carries a target's declared access to the ring's submit methods - feat(durable-ioring)!: report the delay events: lock waits, flush issue and answer, a seal's wait - feat(durable-ioring)!: move every sink to the begin/end pairs and remove the old delay events - feat(durable-ioring): add CorrelationId, a process-scoped id that pairs a begin event with its end - feat(durable-ioring): add the seal, flush and lock-wait pair events and PairingChecker - feat(durable-ioring): emit the seal and flush pairs from the core, each ended on every path - feat(durable-ioring): report a lock wait as a pair, its end written with the lock held, and state the sink's leaf-lock rule - feat(durable-ioring): add RoutingProvider's build, refusing a flush domain claimed twice - feat(durable-ioring): make RoutingProvider a DurabilityProvider that dispatches each seal by domain - feat(durable-ioring): the in-memory backend's targets and the backend itself fault on a script - feat(durable-ioring): export FlushPart, and LINE_PREFIX for the sinks that write a line - fix(durable-ioring): panic on a flush domain the router does not route, as the only report of it - fix(durable-ioring): hand every pair's end to every sink in a fan-out - feat(durable-ioring-events): new crate, the ETW provider and EtwDiagnostics for durable-ioring - feat(durable-ioring-events): write each pair as one ETW activity the platform creates - fix(durable-ioring-events): end text at its first zero so no later field is misread - feat(win-durable-ioring): DebugOutputDiagnostics, a sink that writes each event to the debugger - feat(win-durable-ioring): the default diagnostic sink is EtwDiagnostics - refactor(win-durable-ioring): remove HandleKindQuery and HandleKind, which no Windows API can answer - and the checklists, design notes and tests of the three crates BREAKING CHANGE: durable-ioring's target and submit traits gain a declared access and carry it in a typed Key<A>, Diagnostic and DiagnosticKind gain the begin/end pair variants, and a sink is given every pair's end; win-durable-ioring asks for file access as a typed set of named rights, takes data access as the type parameter of every handle it opens, takes a share mode as a typed set, takes OpenedFile::open's path as a Wtf16String, uses Win32's own disposition enum, and removes HandleKindQuery and HandleKind. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…e, now that clones share The deletion that follows its dependents' move, in its own commit so that every commit builds. Squashes: - feat(win-sync)!: delete try_clone and the conversions into OwnedHandle, now that clones share - docs: renumber win-sync-sys' shared-event item WS-2.2, and tie M21.3 and M21.4 to SAFE-2 BREAKING CHANGE: Event and WaitOnlyEvent are Clone and their clones share one handle; try_clone is removed, try_clone_wait_only is renamed duplicate_wait_only, and the conversions into OwnedHandle are replaced by conversions into SharedHandle, with try_into_owned recovering an OwnedHandle from the last holder. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…rn map for the durable-ioring work The files at the root of the workspace and its tooling, as they stand at the end of mikegrier/durable-ioring-squashed: the CI and publish workflows, the archive lint and its tests, the Learn table-of-contents snapshot and the Win32 Learn map, the workspace checklists, plans, design notes and rationale, the instructions for working in the repository, and the design session on router domains and paired events. None of these belongs to a crate, so none makes a release. Squashes: - the workspace's checklist, plans and design-note updates that accompanied each crate's work - docs: repoint the links the handle-kind removal and the archive move left dead - docs: renumber win-sync-sys' shared-event item WS-2.2, and tie M21.3 and M21.4 to SAFE-2 - docs: archive M44, one handle duplication for the workspace - the archive lint, the Learn map and the sabotage tooling Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
🔵 Needs a closer look
Cross-crate durability and Windows ownership changes require human approval, and elevated ETW verification remains incomplete.
1 open issue
What changed in this PR
Adds the durable I/O ring and its supporting Win32 layers, including typed target access, paired diagnostics, ETW integration, and shared-handle ownership.
Changes:
- Connects durability diagnostics to ETW activities and debugger output.
- Centralizes Win32 handle operations and adopts shared handles across consumers.
- Extends platform-probe reporting, sabotage coverage, release configuration, and planning records.
One documentation nit remains in crates/durable-ioring/src/engine.rs:267: lock-wait diagnostics end when the mutex is acquired, not when the returned guard is dropped.
| File | Description |
|---|---|
tools/test-run-sabotage.ps1 |
Tests case-only sabotage patches. |
tools/sabotage2.json |
Adds case-comparison sabotage coverage. |
release-please-config.json |
Registers new release components. |
DESIGN-RATIONALE.md |
Explains shared wait-target ownership. |
crates/wtf-string/PLANS.md |
Indexes parked work. |
crates/wtf-string/PARKED.md |
Preserves deferred C-string work. |
crates/wtf-string/CHECKLIST.md |
Moves deferred work out of active planning. |
crates/windows-waitable-queues/README.md |
Clarifies measurement order and provenance. |
crates/windows-waitable-queues/Cargo.toml |
Adds the common handle-wrapper dependency. |
crates/windows-topology-sys/COMPLETED-CHECKLIST.md |
Separates an archive heading. |
crates/windows-threadpool-sys/PLANS.md |
Indexes parked diagnostic work. |
crates/windows-threadpool-sys/PARKED.md |
Preserves the close-race investigation. |
crates/windows-threadpool-sys/Cargo.toml |
Adds shared handles and pipe test helpers. |
crates/windows-platform-probes/src/worker_context.rs |
Exposes raw worker-context reporting. |
crates/windows-platform-probes/src/row/tests.rs |
Tests numeric and boolean rendering. |
crates/windows-platform-probes/src/report.rs |
Centralizes argument-refusal output. |
crates/windows-platform-probes/src/long_path.rs |
Adds stable names and raw-row exports. |
crates/windows-platform-probes/src/long_path_report.rs |
Emits raw observations after prose. |
crates/windows-platform-probes/src/lib.rs |
Exposes reporting-support modules. |
crates/windows-platform-probes/src/device_map.rs |
Exposes raw device-map reporting. |
crates/windows-platform-probes/src/completion_port.rs |
Exposes raw completion-port reporting. |
crates/windows-platform-probes/src/cancel_io.rs |
Names the attempt count and exports rows. |
crates/windows-platform-probes/src/build_identity.rs |
Reads crate-specific build stamps. |
crates/windows-platform-probes/src/bin/worker_context.rs |
Emits machine-readable worker observations. |
crates/windows-platform-probes/src/bin/peer_index_cache.rs |
Emits measured or declined rows. |
crates/windows-platform-probes/src/bin/device_map.rs |
Emits observations and fixture refusals. |
crates/windows-platform-probes/src/bin/core_affinity.rs |
Emits affinity data with host readings. |
crates/windows-platform-probes/src/bin/completion_port.rs |
Emits measured or unavailable results. |
crates/windows-platform-probes/src/bin/cancel_io.rs |
Emits cancellation outcomes. |
crates/windows-platform-probes/Cargo.toml |
Uses safe pipe fixtures. |
crates/windows-platform-probes/captures/2026-10-19-interleaved-order/sequential-drained.txt |
Records sequential-order measurements. |
crates/windows-platform-probes/captures/2026-10-19-interleaved-order/interleaved-drained.txt |
Records interleaved-order measurements. |
crates/windows-platform-probes/captures/2026-09-16-drained-handshake/README.md |
Documents historical sampling order. |
crates/windows-platform-probes/build.rs |
Reuses build-identity stamping. |
crates/windows-placement-probe/src/peer_index_cache.rs |
Exposes repetition counts and strategy labels. |
crates/windows-placement-probe/src/core_affinity/tests.rs |
Updates fixtures and tests stable names. |
crates/windows-placement-probe/src/build_identity.rs |
Shares build-stamp interpretation. |
crates/windows-overlapped-io-sys/PLANS.md |
Updates plan status. |
crates/windows-overlapped-io-sys/COMPLETED-CHECKLIST.md |
Separates an archive heading. |
crates/windows-overlapped-io-sys/Cargo.toml |
Adds safe pipe test helpers. |
crates/windows-namespace-request-sys/DESIGN-NOTES.md |
Records withdrawn consumer work. |
crates/windows-namespace-request-sys/COMPLETED-CHECKLIST.md |
Repoints an archived-work link. |
crates/windows-ioring-sys/Cargo.toml |
Uses safe pipe test fixtures. |
crates/windows-impersonation-token-sys/src/tests.rs |
Tests shared clones and independent captures. |
crates/windows-impersonation-token-sys/src/lib.rs |
Adopts SharedHandle for captured tokens. |
crates/windows-impersonation-token-sys/PLANS.md |
Removes completed adoption work. |
crates/windows-impersonation-token-sys/COMPLETED-PLANS.md |
Records shared-handle adoption. |
crates/windows-impersonation-token-sys/COMPLETED-CHECKLIST.md |
Archives adoption rationale and verification. |
crates/windows-impersonation-token-sys/CHECKLIST.md |
Removes the completed work item. |
crates/windows-impersonation-token-sys/Cargo.toml |
Adds the shared-handle dependency. |
crates/windows-file-watcher/PLANS.md |
Indexes parked work. |
crates/windows-file-watcher/PARKED.md |
Preserves deferred watcher capabilities. |
crates/windows-file-enumeration-sys/src/session.rs |
Returns a shared doorbell wait target. |
crates/windows-file-enumeration-sys/src/record.rs |
Updates buffer-alignment documentation. |
crates/windows-file-enumeration-sys/src/model.rs |
Polls borrowed doorbells through win-sync-sys. |
crates/windows-file-enumeration-sys/src/error/tests.rs |
Aligns tests with path-capture failures. |
crates/windows-file-enumeration-sys/src/admission.rs |
Allocates staging through AlignedBuf. |
crates/windows-file-enumeration-sys/README.md |
Documents request-layer integration. |
crates/windows-file-enumeration-sys/PLANS.md |
Indexes the parked contract review. |
crates/windows-file-enumeration-sys/COMPLETED-PLANS.md |
Records path and error-type consolidation. |
crates/win-volume-sys/PLANS.md |
Indexes completed and parked work. |
crates/win-volume-sys/PARKED.md |
Preserves future volume capabilities. |
crates/win-volume-sys/COMPLETED-PLANS.md |
Records completed volume-wrapper work. |
crates/win-text-sys/src/lib.rs |
Exposes Windows ordinal text comparison. |
crates/win-text-sys/PLANS.md |
Links wrapper implementation planning. |
crates/win-sync-sys/src/wait/tests.rs |
Adapts tests to shared event clones. |
crates/win-sync-sys/src/wait_many/tests.rs |
Updates cloning and ownership recovery. |
crates/win-sync-sys/src/signal/tests.rs |
Adapts signal tests to shared ownership. |
crates/win-sync-sys/src/signal.rs |
Updates the wait-only duplication example. |
crates/win-sync-sys/src/lib.rs |
Re-exports common handle APIs. |
crates/win-sync-sys/CHECKLIST.md |
Clarifies release sequencing and adoption status. |
crates/win-sync-sys/Cargo.toml |
Adds handle and shared-owner dependencies. |
crates/win-shared-os-owned-handle/PLANS.md |
Removes completed adoption work. |
crates/win-shared-os-owned-handle/COMPLETED-PLANS.md |
Records shared-owner adoption. |
crates/win-numa-sys/PLANS.md |
Updates plan status. |
crates/win-multi-file-tail-watcher/PLANS.md |
Indexes parked follow-ups. |
crates/win-multi-file-tail-watcher/PARKED.md |
Preserves diagnostic and buffer-policy questions. |
crates/win-multi-file-tail-watcher/COMPLETED-PLANS.md |
Records completed watcher work. |
crates/win-job-launcher/Cargo.toml |
Adds the common handle-wrapper dependency. |
crates/win-handles-sys/src/lib.rs |
Exposes close, comparison, flags, and duplication APIs. |
crates/win-handles-sys/PLANS.md |
Removes completed handle-wrapper planning. |
crates/win-handles-sys/COMPLETED-PLANS.md |
Records completed handle APIs. |
crates/win-handles-sys/CHECKLIST.md |
Links completed handle operations. |
crates/win-handles-sys/Cargo.toml |
Describes the expanded handle API. |
crates/win-etw-sys/src/lib.rs |
Exposes ETW provider, activity, and test-session APIs. |
crates/win-etw-sys/src/activity/tests.rs |
Tests activity-ID creation and uniqueness. |
crates/win-etw-sys/src/activity.rs |
Wraps explicit ETW activity-ID creation. |
crates/win-etw-sys/PLANS.md |
Links ETW implementation planning. |
crates/win-error-codes/CHECKLIST.md |
Updates a cross-component work-order link. |
crates/win-durable-ioring/src/windows_backend/wait/tests.rs |
Explicitly duplicates event test handles. |
crates/win-durable-ioring/src/windows_backend/disposition/tests.rs |
Tests typed creation-disposition mappings. |
crates/win-durable-ioring/src/lib.rs |
Exposes diagnostics and path types. |
crates/win-durable-ioring/src/dioring/tests/stamps.rs |
Removes the relocated flush-stamp test. |
crates/win-durable-ioring/src/dioring/tests/seals.rs |
Declares access for deliberate write failure. |
crates/win-durable-ioring/src/dioring/delivery.rs |
Clarifies shared event-clone terminology. |
crates/win-durable-ioring/examples/blocking_push/main.rs |
Adopts typed file options and target setup. |
crates/win-debugging-sys/src/lib.rs |
Exposes debugger-output and capture APIs. |
crates/win-debugging-sys/PLANS.md |
Links debugging-wrapper planning. |
crates/io-buffers/COMPLETED-CHECKLIST.md |
Marks archived work complete. |
crates/durable-ioring/src/provider.rs |
Links the routing-provider API. |
crates/durable-ioring/src/oracle.rs |
Exposes the diagnostic pairing checker. |
crates/durable-ioring/src/io_target/tests.rs |
Tests declared target access. |
crates/durable-ioring/src/io_core/tests.rs |
Wires diagnostic and scripted-backend tests. |
crates/durable-ioring/src/io_core/provider.rs |
Supplies provider-domain diagnostic names. |
crates/durable-ioring/src/engine.rs |
Integrates watched engine guards; has the timing-documentation nit noted above. |
crates/durable-ioring/src/durability/tests/providers.rs |
Supplies domain names in provider fixtures. |
crates/durable-ioring/src/durability/tests.rs |
Supports diagnostic sinks and named domains. |
crates/durable-ioring/src/durability/lineages.rs |
Ends diagnostic pairs on lineage termination. |
crates/durable-ioring/src/driver.rs |
Exposes lock-watch integration APIs. |
crates/durable-ioring/src/backend/tests.rs |
Tests access-denied refusal mapping. |
crates/durable-ioring/src/backend.rs |
Adds access-denied refusal semantics. |
crates/durable-ioring/PLANS.md |
Indexes parked work. |
crates/durable-ioring/CONTRACT.md |
Specifies target access and shared readiness ownership. |
crates/durable-ioring/COMPONENT.md |
Clarifies sample-log layering. |
crates/durable-ioring-events/tests/registration.rs |
Tests provider-registration lifetime across sink clones. |
crates/durable-ioring-events/src/lib.rs |
Exposes ETW diagnostics, schemas, and manifest. |
crates/durable-ioring-events/PLANS.md |
Links event-provider implementation planning. |
Cargo.toml |
Adds new workspace members. |
.release-please-manifest.json |
Seeds new crate release versions. |
Review effort: Balanced
…, now that the launcher builds on it win-job-launcher supervises every phase of every sweep, and its handle duplication is now win-handles-sys' duplicate_handle, so a change to win-handles-sys is a change to the supervisor and reaches every manifest. The harness test that checks the launcher's workspace dependencies against cargo caught the new dependency as intended. The list of shared inputs, its recognition test (both directions, with a sibling that shares the prefix) and the root design note's statement of the list say so. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ed, not when its guard is dropped present_watched's documentation still said a watched lock's wait is reported when the guard is dropped, which was the removed duration design. LockWatch::lock reports the end of a contended wait with the lock just taken, before it returns the guard, so the pair does not include the time the lock is held. Found by the Copilot review of the pull request; no other statement of the old timing remains in the crates. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
The durable ioring and the safe Windows layers under it, cut into one commit per releasing crate so that release-please attributes each crate's changes to it. Apart from the two fixes at the end, the content is
mikegrier/durable-ioring-squashed's (the trees were identical) as 105 commits.The durable ioring
durable-ioring(portable core),win-durable-ioring(the Windows driver) and the newdurable-ioring-events(an ETW provider andEtwDiagnostics).Key<A>carries a target's declared access to the ring's submit methods, andRoutingProviderdispatches each seal by flush domain.CorrelationId.PairingCheckeris the one definition of what a correct producer emits. A sink assumes no begin for an end, and a fan-out hands every pair's end to every sink (DI-D-96).EventActivityIdControland carried on both events (DE-D-6). Text in an event ends at its first zero (DE-D-7).DebugOutputDiagnosticswrites each event to the debugger.Safe layers over Win32
win-etw-sys,win-debugging-sysandwin-text-sys.win-handles-sysgainsset_handle_information,compare_object_handles,close_handleandduplicate_handle, which chooses both the access and the inheritance.windows-file-watcher,windows-waitable-queuesandwin-job-launcherduplicate handles throughwin-handles-sysinstead of their ownDuplicateHandlecalls.windows-file-watcherhands out its doorbell as aSharedHandlethroughReceiver::doorbell_shared.windows-threadpool-sysaccepts aSharedHandleas a wait target, andwindows-file-enumeration-sysis rebuilt on the request crate's entries and the shared event.How the commits are cut
!and aBREAKING CHANGE:footer where the crate breaks. A "Squashes:" list in each body names the original commits.chorecommits, and the workspace's CI, tooling and root documents follow the crate commits.win-handles-sysjoins the shared inputs of the sabotage sweeps, becausewin-job-launcher, which supervises every sweep, now builds on it (the harness test that checks the launcher's dependencies against cargo caught it); and a doc comment indurable-ioringthat still described the removed lock-wait timing is corrected. The first makes a change towin-handles-sysreach every manifest's sweep, which is the cost of the launcher depending on it.cargo check --all-targets, and the tip passes--locked.win-sync-syshas two commits on purpose. An additivefeatcomes first, the dependents move, and the deletingfeat!comes last. Deleting first would breakwin-durable-ioring, which still callstry_clone.durable-ioring,durable-ioring-eventsandwin-durable-ioringare onefeat!commit. Each needs the others' final API, so none builds alone. All three take a breaking bump, so none gets one it did not earn.tools/check-commit-scope.ps1flags it for that reason.Breaking changes
durable-ioringandwin-durable-ioring: the typedKey<A>, the begin/end pair events, andwin-durable-ioring's typed access, share mode, path and disposition.durable-ioring-eventsis new, and takes its first breaking bump from the same commit.win-etw-sys(new): events are written with an explicit activity id, soRecordedgains fields and is#[non_exhaustive].win-sync-sys:Eventclones share one handle, andtry_cloneand the conversions intoOwnedHandleare removed.windows-file-enumeration-sys:doorbell_ownedis replaced bydoorbell_waitable, and it takes the request crate's path contract.windows-threadpool-sys: a wait built from anEventis a shared target, soWaitableHandle::into_handlereturns the wrapper unchanged while any clone of theEventremains.Merging
Please merge with a merge commit or a rebase, not a squash. release-please attributes versions and changelog entries to crates from the individual commit subjects and the paths they touch, so a squash would collapse the branch into one subject.
Release order
The three crates that call
win_handles_sys::duplicate_handlerequirewin-handles-sys = "0.1.0", which is also whatwin-sync-sysrequires. Thewin-handles-sysrelease that addsduplicate_handleshould publish first. If a consumer is published against 0.1.0, the build verification fails loudly, so nothing wrong would ship.Verification
tools/run-sabotage.ps1.Trace-session tests: the ETW session tests in
durable-ioring-events/tests/session.rsneed an elevated process, so they are ignored by default and CI runs them with--include-ignoredin the default-features job. They passed there on this branch's first CI run, including the ones rewritten or added after the last local elevated run. One session sabotage entry (DE-D-7, an end releasing its pair only when it is written) was added without a sweep.