summaryrefslogtreecommitdiff
path: root/src/buildtool/storage/TARGETS
AgeCommit message (Collapse)Author
2025-02-28Include ArtifactDigestFactory into "common" libraryMaksim Denisov
2025-02-20Separate off id generation to a separate libraryKlaus Aehlig
... and rename appropriately to reflect contents more precisely than the generic "common". This separation also disentangles dependencies a bit.
2025-02-14code structure: rename symlinks_map folder to symlinksPaul Cristian Sarbu
...to remove the unnecessary link between folder name and the logic of resolve_symlinks_map.
2025-02-05Repository garbage collector: support dropping onlyKlaus Aehlig
Add support for repository gargabe collection to only drop the older generations without rotating.
2025-01-07Store BackendDescription in StorageConfigMaksim Denisov
...instead of a plain hash. Hash gets computed for different storage types on the fly.
2025-01-07Pass BackendDescription to StorageConfig from the outsideMaksim Denisov
2025-01-07Pack BackendDescription to a classMaksim Denisov
...to let it be stored as an independent instance.
2024-12-09Move compactifier to a separate libraryMaksim Denisov
2024-12-09Move garbage_collector to a separate libraryMaksim Denisov
2024-11-14storage: Implement IWYU suggestionsPaul Cristian Sarbu
2024-10-29Clean up unused dependenciesKlaus Aehlig
2024-10-25Add dependencies explicitly that are included directlyKlaus Aehlig
... instead of relying on those dependencies being pulled in indirectly.
2024-10-25StorageUtils: Add generation-aware rehashing ID file mapPaul Cristian Sarbu
Such a file could be used to store mappings of digests from CAS or Git cache to digests of different hash type that represent same content.
2024-09-23Reorder dependencies and remove duplicates in OSSMaksim Denisov
2024-09-13Rename Compatibility class to ProtocolTraitsMaksim Denisov
...and move it to the common stage.
2024-09-09Replace ArtifactDigest::CreateMaksim Denisov
...with ArtifactDigestFactory::HashDataAs
2024-09-09Replace ArtifactDigest::CreateFromFileMaksim Denisov
...with ArtifactDigestFactory::HashFileAs
2024-07-22Use HashFunction from StorageConfig in fs_utilsMaksim Denisov
2024-07-22Pass HashFunction to ArtifactDigest::CreateMaksim Denisov
2024-07-22Use HashFunction functionality via Instance()Maksim Denisov
...to track changes during refactoring easier.
2024-07-19Add garbage collection routines for repository rootsKlaus Aehlig
2024-07-16TargetCache: Use StorageConfig instance for shardingPaul Cristian Sarbu
Instead of computing the shard based on the RemoteExecutionConfig singleton, use the already computed hash stored in the passed StorageConfig instance, which now needs to be set up separately if bootstrapping in order to avoid unwanted includes. Storing the backend description to CAS and corresponding audit checks now take place in main.
2024-07-16StorageConfig: Store also the execution backend description idPaul Cristian Sarbu
...such that it will be available to the TargetCache for sharing. Also, GC does not require remote execution information, so the logic for this subcommand is moved earlier in main.
2024-07-16Create separate library for DescribeBackendPaul Cristian Sarbu
2024-07-05Convert StorageConfig to a general classMaksim Denisov
2024-07-05Implement uplinking logic in a separate class.Maksim Denisov
2024-07-05Pass Storage and StorageConfig to StorageUtils by referenceMaksim Denisov
2024-07-05Move functionality from StorageConfig to related classes.Maksim Denisov
2024-07-05Remove ConfigData from StorageConfigMaksim Denisov
...since it is an extra class that overcomplicates the config class.
2024-07-01Ensure unique paths are used in compactificationMaksim Denisov
2024-06-28Use (un)expected for CAS accessOliver Reiche
2024-06-11Move creation of TargetCacheKey description to TargetCacheMaksim Denisov
...to use corresponding Storage for storing auxiliary information.
2024-05-27Fix headers in local_cas and bazel_network.Maksim Denisov
2024-04-30Compactification: Implement a generic concurrent logic.Maksim Denisov
2024-04-17Compactification: Split large entries.Maksim Denisov
During garbage collection split and remove from the storage every entry that is larger than a threshold.
2024-04-17Compactification: Remove spliced entries.Maksim Denisov
During garbage collection remove from the storage every entry that has the large entry.
2024-04-02LargeBlobs: Split large objects.Maksim Denisov
* Add LargeObjectCAS fields for files and trees to LocalCAS; * Add logic for splitting objects located in the main storage. Tested: Splitting of large, small and empty objects.
2024-04-02LargeObjectCAS: Store large objects.Maksim Denisov
Every large object is keyed by the hash of the result and contains hashes of the parts from which the result can be reconstructed.
2024-04-02Move file chunker to storage.Maksim Denisov
2024-03-15Clean up more includes and targetsPaul Cristian Sarbu
Some of the more specific issues addressed: - missing log_level target/include - header-only libs wrongly marking deps as private - missing/misplaced gsl includes
2024-03-13Move storage-aware tmpdir creation to configKlaus Aehlig
... as the fs_utils have a lot more dependencies making them usable in less places. Moreover, this function also serves to shape the layout of the local build root and hence is more appropriately placed in the config anyway.
2024-03-12storage config: remove unneeded private dependencyKlaus Aehlig
2024-03-05fs_utils: specify path for foreign-file root cacheKlaus Aehlig
As the internal distdir data structure now supports the executable bit, it is also expressive enough to support foreign-file repositories. Hence we can use this cache, getting potentially more cache hits.
2023-11-02Decoupling symlinks map and CAS utilities from just-mrPaul Cristian Sarbu
This is required in order to make them available to 'just serve' in a minimal just installation.
2023-04-26imports: Switch to Microsoft GSL implementationOliver Reiche
... with two minor code base changes compared to previous use of gsl-lite: - dag.hpp: ActionNode::Ptr and ArtifactNode::Ptr are not wrapped in gsl::not_null<> anymore, due to lack of support for wrapping std::unique_ptr<>. More specifically, the move constructor is missing, rendering it impossible to use std::vector<>::emplace_back(). - utils/cpp/gsl.hpp: New header file added to implement the macros ExpectsAudit() and EnsureAudit(), asserts running only in debug builds, which were available in gsl-lite but are missing in MS GSL.
2023-03-23targets: Fix deps structurePaul Cristian Sarbu
2023-03-13Storage: Reworked storage and garbage collectionOliver Reiche
The improved GC implementation uses refactored storage classes instead of directly accessing "unknown" file paths. The required storage class refactoring is quite substantial and outlined in the following paragraphs. The module `buildtool/file_system` was extended by: - `ObjectCAS`: a plain CAS implementation for reading/writing blobs and computing digests for a given `ObjectType`. Depending on that type, files written to the file system may have different properties (e.g., the x-bit set) or the digest may be computed differently (e.g., tree digests in non-compatible mode). A new module `buildtool/storage` was introduced containing: - `LocalCAS`: provides a common interface for the "logical CAS", which internally combines three `ObjectCAS`s, one for each `ObjectType` (file, executable, tree). - `LocalAC`: implements the action cache, which needs the `LocalCAS` for storing cache values. - `TargetCache`: implements the high-level target cache, which also needs the `LocalCAS` for storing cache values. - `LocalStorage`: combines the storage classes `LocalCAS`, `LocalAC`, and `TargetCache`. Those are initialized with settings from `StorageConfig`, such as the build root base path or number of generations for the garbage collector. `LocalStorage` is templated with a Boolean parameter `kDoGlobalUplink`, which indicates that, on every read/write access, the garbage collector should be used for uplinking across all generations (global). - `GarbageCollector`: responsible for garbage collection and the global uplinking across all generations. To do so, it employs instances of `LocalStorage` with `kDoGlobalUplink` set to false, in order to avoid endless recursion. The actual (local) uplinking within two single generations is performed by the corresponding storage class (e.g., `TargetCache` implements uplinking of target cache entries between two target cache generations etc.). Thereby, the actual knowledge how data should be uplinked is implemented by the instance that is responsible for creating the data in the first place.