commit | de66620d71c0ab422dfd24cb0a36c0490ec26084 | [log] [tgz] |
---|---|---|
author | Googler <shahan@google.com> | Thu Oct 10 07:30:34 2024 -0700 |
committer | Copybara-Service <copybara-worker@google.com> | Thu Oct 10 07:32:34 2024 -0700 |
tree | 492feda2388b45723209cec4793029e7fef62109 | |
parent | c2d316b4d3f832d0c5677f0abc63c27d059873b8 [diff] |
Deserializer for FileInvalidationData. The core of FileDependencyDeserializer is an asynchronous state machine implemented using Futures.transformAsync to recursively add more stages as needed. Asynchrony is a consequence of the fact that the resolution mechanism is an asynchronous remote cache lookup for FileInvalidationData and deserialization typically requires multiple, sequential resolution steps. It uses the usual concurrent map to deduplicate keyed computations. In this case, the concurrent map is a weak-valued Caffeine instance. The rationale is that the map values (which are effectively sets of files) are referenced by the SkyValues that would be invalidated by changes to those files. So as the SkyValues are invalidated and GCd, the cache is automatically cleaned up. This fits well with the transitive structure of the FileDependencies class. ## Servicification Considerations The cache keys are versioned so it is theoretically possible to share a single cache across multiple Bazel instances. At the moment, the BUILD dependencies are somewhat broad due to including Skyframe serialization, but only the FingerprintValueService is needed. Otherwise coupling to Bazel code is deliberately minimized. PiperOrigin-RevId: 684437123 Change-Id: Iec445c222d6f072bd10044102dbcb01c62ab739d
{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.
Follow our tutorials:
To report a security issue, please email security@bazel.build with a description of the issue, the steps you took to create the issue, affected versions, and, if known, mitigations for the issue. Our vulnerability management team will respond within 3 working days of your email. If the issue is confirmed as a vulnerability, we will open a Security Advisory. This project follows a 90 day disclosure timeline.
See CONTRIBUTING.md