Express requirements as carets, and take ps-reclaim 0.1.1 - #85
Closed
pathscale wants to merge 1 commit into
Closed
Conversation
Four dependencies carried `=` requirements: `data_bucket`, `WorkTablesIndex`, `indexset` and `worktable_codegen`. None of them needs to. `ps-reclaim` is the exception that was never locked. A bare `"0.1.0"` already means `^0.1.0`, so beta.16 picks up 0.1.1 on any fresh resolve. It moves to `"0.1.1"` to raise the floor above the version whose `Guard` was `Send`, which is a soundness bound rather than a lock: a resolve cannot land on the version with the use-after-free window at all. Caret on a `0.0.x` version describes the same set as `=`, so widening `WorkTablesIndex` changes nothing until that crate reaches 0.1.0. Removing the `=` still matters: the file stops implying a constraint it is not expressing. `worktable_codegen` is the one that gives something up. The exact pin held the macro and the runtime it generates calls into in lockstep, and a caret admits later betas. A mismatched pair fails at expansion in a consumer rather than as a resolver conflict here. `docs/TODO.md` moves the two items that were listed as blocking beta.16, and did not stop it, into a section recording how they closed. Re-measuring the partition regression stays open, now against 0.1.1 rather than against the guard size 0.1.1 removes, and the file says plainly which set of `partition_ref` numbers not to reuse and why.
Merged
Owner
Author
|
Superseded by #87, which carries this commit rebased onto master. One change on top: the two intra-workspace pins ( |
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.
Every
=requirement inCargo.tomlbecomes a caret,ps-reclaimmoves to therelease that fixes two use-after-free windows, and the version goes to
1.0.0-beta.17.Requirements
data_bucket"=0.5.5""0.5.5"indexset(WorkTablesIndex)"=0.0.9""0.0.9"vanilla_indexset(indexset)"=0.15.0""0.15.0"worktable_codegen"=1.0.0-beta.15""1.0.0-beta.15"ps-reclaim"0.1.0""0.1.1"Two of these are worth being precise about.
ps-reclaimwas never locked. A bare"0.1.0"is already^0.1.0, so>=0.1.0, <0.2.0, and 0.1.1 satisfies it: beta.16 picks up the fix on anyfresh resolve without this change. The bump raises the floor above the version
with the
Sendguard, so a resolve cannot land on it at all. That is thereason to change the line, not the caret.
Caret on a
0.0.xversion buys nothing.^0.0.9means>=0.0.9, <0.0.10,which is the same set
=0.0.9describes.WorkTablesIndexneeds a 0.1.0release before the requirement can widen. The
=is gone either way, so thefile no longer implies a constraint it is not expressing.
worktable_codegenis the one that carries risk. The exact pin wasenforcing lockstep between the macro and the runtime it generates calls into,
and
^1.0.0-beta.15now admits beta.16, beta.17 and 1.0.0. A mismatched pairfails at expansion rather than at resolve, so it will be a compile error in a
consumer rather than a resolver conflict here. Changed as asked; noted once.
ps-reclaim0.1.1Published, and
pathscale/ps-reclaimnow has CI (build, test, doctests, fmt,clippy, Miri under strict provenance, and publish from master) where it
previously had no workflows at all. 0.1.1 fixes:
GuardwasSendwhile its own documentation said it was not, so dropping asent guard stored
NO_DOMAINinto the originating thread's pin slot anddecremented the wrong thread's
DEPTH. It is now!Sendby construction,held by a
compile_faildoctest.Guardwas three words againstcrossbeam-epoch's one.partition_refreturns one per lookup, so it paid the size on every call. It is now one word.
docs/TODO.mdThe two items that were listed as blocking beta.16 and did not stop it are
moved to a "Closed, and how" section: the
ps-reclaimpublish, and CI havingnever run on that branch. What remains blocking is re-measuring the partition
regression on a quiet machine, now against 0.1.1 rather than against the guard
size that 0.1.1 removes, and deciding whether to yank
ps-reclaim0.1.0 andbeta.16.
The file also now says explicitly not to use the second set of
partition_refnumbers that circulated during the beta.16 release. They were taken before
673869cshowed the benchmark arm labelledpinned_getwas callingpartition_ref, they were taken under load, and they disagree with theinterleaved run by roughly a factor of two on beta.15. Neither set has been
reproduced on a quiet box.
Verification
cargo fmt --all -- --check,cargo clippy --workspace --all-targets -- -D warningsandcargo test --workspace --all-targetsall clean locally againstps-reclaim 0.1.1resolved from the registry.Cargo.lockis gitignored here,so CI resolves fresh.
Merging cuts 1.0.0-beta.17, since the publish job releases whatever version
master carries. The perf item above is open at merge time.