Explicitly interrupt a cancelled strategy instead of relying on a misleading checkState

Future.cancel() is expected to return false if the future is done or had been
cancelled previously - a situation that often arises in stopBranch(). We therefore
want to remove the checkState for Future.cancel()'s return value.

However, it turned out that removing the checkState by itself would cause some
dynamic builds to fail: if the future of the strategy calling stopBranch() was
itself cancelled but not interrupted (a situation that sometimes arises), both
branches could attempt to write outputs. The IllegalStateException thrown by
checkState had the effect of interrupting the cancelled branch, allowing the build
to succeed most of the time, as long as the exception got caught somewhere (which
it often was).

We therefore want to replace the implicit effect of the misleading checkState with
an explicit check for a cancelled strategy and an explicit interruption.

RELNOTES: None.
PiperOrigin-RevId: 342340917
1 file changed
tree: 78297276779bc4ecc0dd1f56c965d6298a99ed32
  1. .bazelci/
  2. examples/
  3. scripts/
  4. site/
  5. src/
  6. third_party/
  7. tools/
  8. .bazelrc
  9. .gitattributes
  10. .gitignore
  11. AUTHORS
  12. BUILD
  13. CHANGELOG.md
  14. CODEBASE.md
  15. CODEOWNERS
  16. combine_distfiles.py
  17. combine_distfiles_to_tar.sh
  18. compile.sh
  19. CONTRIBUTING.md
  20. CONTRIBUTORS
  21. distdir.bzl
  22. ISSUE_TEMPLATE.md
  23. LICENSE
  24. README.md
  25. WORKSPACE
README.md

Bazel

{Fast, Correct} - Choose two

Build and test software of any size, quickly and reliably.

  • Speed up your builds and tests: Bazel rebuilds only 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.

Getting Started

Documentation

Contributing to Bazel

See CONTRIBUTING.md

Build status