Only wipe the whole sandbox base during the first build in a server.

During the lifetime of a Bazel server, assign unique identifiers to
each sandboxed action so that their symlink trees are guaranteed to be
disjoint as they are keyed on that identifier.  This was in theory
already happening... but it actually wasn't and there was no test to
validate this assumption.

With that done, there is no need to ensure that the sandbox base is clean
before a build -- unless we are the very first build of a server, in which
case we must ensure we don't clash with possible leftovers from a past
server.

Note that we already clean up each action's tree as soon as the action
completes, so the only thing we are trying to clean up here are stale
files that may be left if those individual deletions didn't work (e.g.
because there were still stray processes writing to the directories)
or if --sandbox_debug was in use.

This is a prerequisite before making deletions asynchronous for two
reasons: first, we don't want to delay build starts if old deletions are
still ongoing; and, second, we don't want to schedule too broad
deletions that could step over subsequent builds (i.e. we only want to
delete the contents of the *-sandbox directories, which contain one
subdirectory per action, and not the whole tree).

Lastly, add a test for this expected behavior (which is what actually
triggered the fix) and for the fact that we expect the identifiers to
be always different.

Partially addresses https://github.com/bazelbuild/bazel/issues/7527.

RELNOTES: None.
PiperOrigin-RevId: 243635557
8 files changed
tree: 3535b4f5ea6d004971e56898decd442744187340
  1. .bazelci/
  2. examples/
  3. scripts/
  4. site/
  5. src/
  6. third_party/
  7. tools/
  8. .gitattributes
  9. .gitignore
  10. AUTHORS
  11. BUILD
  12. CHANGELOG.md
  13. CODEOWNERS
  14. combine_distfiles.py
  15. combine_distfiles_to_tar.sh
  16. compile.sh
  17. CONTRIBUTING.md
  18. CONTRIBUTORS
  19. distdir.bzl
  20. ISSUE_TEMPLATE.md
  21. LICENSE
  22. README.md
  23. 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 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.

Getting Started

Documentation

Contributing to Bazel

See CONTRIBUTING.md

Build status

Bazel is released in ‘Beta’. See the product roadmap to learn about the path toward a stable 1.0 release.