commit | 5f1658fe02e5e585365c817ed2b8d064d6ffc78b | [log] [tgz] |
---|---|---|
author | mschaller <mschaller@google.com> | Mon Feb 25 16:37:42 2019 -0800 |
committer | Copybara-Service <copybara-worker@google.com> | Mon Feb 25 16:39:15 2019 -0800 |
tree | 822fb56878d8674ed30028acec1396e5be8a40b9 | |
parent | b81776fad62771a261eaa8ec8ecedca3bd88969a [diff] |
Mitigate unordered dirtying of rewound nodes by allowing repeats When a Skyframe node is restarted, and it dirties some of its transitive dependencies, it does not dirty those dependencies as a single atomic action, nor does it dirty them in a reverse topological order (i.e. starting from the leaves of the dirtied subgraph and proceeding to the subgraph's root(s)). This leaves rewinding vulnerable to a race where e.g. a sibling action requests the to-be-dirtied subgraph's root artifact node (corresponding to the lost input) after it's been dirtied, but before its child generating action node has been dirtied. That artifact node may then evaluate to completion, and become done, before its child is dirtied. Then, when the failed action node (which requested the rewinding) restarts, and requests its inputs, it will find the lost input's node is done and proceed with its evaluation, despite that its lost input's generating action has yet to run. A proper fix will ensure that no node in a rewinding's to-be-dirtied subgraph is scheduled for evaluation before its transitive deps in that subgraph are dirtied. Drive-by limiting of action toString length in rewinding log statements. RELNOTES: None. PiperOrigin-RevId: 235625329
{Fast, Correct} - Choose two
Build and test software of any size, quickly and reliably.
Speed up your builds and tests: Bazel only rebuilds what is necessary. With advanced local and distributed caching, optimized dependency analysis and parallel execution, you get fast and incremental builds.
One tool, multiple languages: Build and test Java, C++, Android, iOS, Go, and a wide variety of other language platforms. Bazel runs on Windows, macOS, and Linux.
Scalable: Bazel helps you scale your organization, codebase, and continuous integration solution. It handles codebases of any size, in multiple repositories or a huge monorepo.
Extensible to your needs: Easily add support for new languages and platforms with Bazel's familiar extension language. Share and re-use language rules written by the growing Bazel community.
Follow our tutorials:
See CONTRIBUTING.md
Bazel is released in ‘Beta’. See the product roadmap to learn about the path toward a stable 1.0 release.