Skip to content

Split build-dir lock into dedicated lock #16708

Merged
epage merged 1 commit intorust-lang:masterfrom
ranger-ross:split-locks
Mar 6, 2026
Merged

Split build-dir lock into dedicated lock #16708
epage merged 1 commit intorust-lang:masterfrom
ranger-ross:split-locks

Conversation

@ranger-ross
Copy link
Member

What does this PR try to resolve?

This PR separates the build-dir and artifact-dir locks so that an exclusive lock on artifact-dir does not force an exclusive lock on build-dir and vise-versa.

The motivation of this change is for fine grain locking to work even when build-dir == artifact-dir (the default)
However, note that this does NOT feature gate the lock file renaming as build-dir is not considered to be part of the public interface of Cargo.

Tracking issue: #4282

How to test and review this PR?

See the updated tests in build_dir.rs

Also note that while testing this change I discovered a separate bug around cargo package.
For now I opened a separate issue (#16707) added a FIXME to make it clear that the tests describe the current behavior, its not ideal.

Open Questions

  • Are we happy with .cargo-build-lock?
    • In the recent office hours, we mentioned having the .cargo- prefix would be nice for consistency.
  • Should we also rename .cargo-lock to .cargo-artifact-lock?
    • not sure if this is considered public interface since its in target-dir but not really meant for external consumption

r? @epage

This commit seperates the `build-dir` and `artifact-dir` locks so that
an exclusive lock on `artifact-dir` does not force an exclusive lock on
`build-dir` and vise-versa.

The motivation of this change is for fine grain locking to work even
when `build-dir` == `artifact-dir`
@rustbot rustbot added A-layout Area: target output directory layout, naming, and organization S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 5, 2026
Copy link
Contributor

Choose a reason for hiding this comment

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

Should we also rename .cargo-lock to .cargo-artifact-lock?

That could negatively impact cross-version builds.

Which gets me thinking, does this PR negatively impact cross-version builds?

  1. this only impacts users who have a shared artifact and build dir
  2. this only impacts users who grab only the build dir lock
  3. this only impacts state that is not scoped by the hash of the cargo/rustc version

That seems relatively small

Copy link
Member

Choose a reason for hiding this comment

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

this only impacts state that is not scoped by the hash of the cargo/rustc version

The most common scenario that hash may collides is using different nightly toolchains, though

  • Rustc bootstrap IIRC doesn't run different nightly in paralell
  • Tools like cargo-bisect-rustc runs in serial.

Agree with the analysis!

@epage epage enabled auto-merge March 5, 2026 16:19
Copy link
Member

Choose a reason for hiding this comment

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

this only impacts state that is not scoped by the hash of the cargo/rustc version

The most common scenario that hash may collides is using different nightly toolchains, though

  • Rustc bootstrap IIRC doesn't run different nightly in paralell
  • Tools like cargo-bisect-rustc runs in serial.

Agree with the analysis!

@epage epage added this pull request to the merge queue Mar 6, 2026
Merged via the queue into rust-lang:master with commit 6cea00c Mar 6, 2026
56 of 58 checks passed
@rustbot rustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 6, 2026
rust-bors bot pushed a commit to rust-lang/rust that referenced this pull request Mar 13, 2026
Update cargo submodule

21 commits in 90ed291a50efc459e0c380d7b455777ed41c6799..cbb9bb8bd0fb272b1be0d63a010701ecb3d1d6d3
2026-03-05 15:11:25 +0000 to 2026-03-13 14:34:16 +0000
- fix(git): preserve SCP-like submodule URLs for fetch (rust-lang/cargo#16744)
- Fix 16732 (rust-lang/cargo#16746)
- fix(rustdoc): switch to new `--emit` options (rust-lang/cargo#16739)
- fix(git): convert SCP-like submodule URLs to ssh:// format (rust-lang/cargo#16727)
- fix(core): typo (rust-lang/cargo#16738)
- CARGO_TARGET_DIR doesn't have to be relative (rust-lang/cargo#16735)
- chore(ci): Detect user changes to src/etc/man (rust-lang/cargo#16736)
- util: Exclude from iCloud Drive sync on macOS (rust-lang/cargo#16728)
- fix(compile): Stop on denying warnings without --keep-going  (rust-lang/cargo#16725)
- feat(shell): Support OSC 9;4 progress on ptyxis (rust-lang/cargo#16730)
- Let git decide when to run gc (rust-lang/cargo#16459)
- chore(deps): update cargo-semver-checks to v0.47.0 (rust-lang/cargo#16723)
- fix(compile): Turn warning summaries into errors also (rust-lang/cargo#16721)
- fix(fix): Switch from ad-hoc to structured warnings (rust-lang/cargo#16711)
- fix: ignore implicit std dependencies in `unused-crate-dependencies` lint (rust-lang/cargo#16677)
- chore(deps): update msrv (3 versions) to v1.92 (rust-lang/cargo#16716)
- chore(deps): update msrv (1 version) to v1.94 (rust-lang/cargo#16710)
- fix(script): surpress `unused_features` lint for embedded (rust-lang/cargo#16714)
- Split `build-dir` lock into dedicated lock  (rust-lang/cargo#16708)
- Add missing truncate when writing .crate files (rust-lang/cargo#16688)
- refactor(fix): Prep for annotate-snippets (rust-lang/cargo#16702)
@rustbot rustbot added this to the 1.96.0 milestone Mar 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-layout Area: target output directory layout, naming, and organization

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants