aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe
Commit message (Collapse)AuthorAge
...
* Remove ConfiguredTarget.getTarget() from AspectFunction and replace it with aGravatar mjhalupka2018-01-25
| | | | | | ConfiguredTargetAndTarget.getTarget(). PiperOrigin-RevId: 183241259
* SerializerAdapterGravatar shahan2018-01-24
| | | | | | Allows ObjectCodec to be registered as a Kryo Serializer. PiperOrigin-RevId: 183149177
* Add codecs for TestConfiguration, ConfiguredFragmentValue, and ↵Gravatar janakr2018-01-24
| | | | | | | | TestConfigFragment. Thanks to shahan@ for the TestConfigFragment code. PiperOrigin-RevId: 183127152
* Remove some references to configuredTarget.getTarget() by getting the target ↵Gravatar mjhalupka2018-01-24
| | | | | | from package. PiperOrigin-RevId: 183121812
* Stop storing the base configuration in AspectKey. As with ↵Gravatar janakr2018-01-24
| | | | | | | | https://github.com/bazelbuild/bazel/commit/3863b536bcab8de2000f342c85c31c7ea91cccbe, we don't want to have to serialize/deserialize a BuildConfiguration in a SkyKey. Cutting the edge to the aspect configuration will come in a follow-up. PiperOrigin-RevId: 183117915
* Store a SkyKey inside BuildInfoCollectionValue.KeyAndConfig instead of a ↵Gravatar janakr2018-01-24
| | | | | | | | BuildConfiguration: BuildConfigurations are too heavy to be in SkyKeys. This adds an extra dependency for BuildInfoCollectionValues, but there are not many in the graph, and the dep request is now batched, which is better than before. PiperOrigin-RevId: 183106788
* Add codecs for SkyKeys that are needed for null build.Gravatar janakr2018-01-24
| | | | PiperOrigin-RevId: 183102476
* Introduce a wrapper around the ImmutableSortedSet<Class<? extends ↵Gravatar janakr2018-01-24
| | | | | | | | BuildConfiguration.Fragment>> set of Fragment classes that is part of the BuildConfigurationValue.Key. This class allows us to compute a fingerprint of the wrapped ImmutableSortedSet, making equality comparisons fast. The number of additional wrapper objects is the number of distinct sets of fragment classes, so 1. (In fact, we don't even need to compute a fingerprint, since reference equality does the job for us here, but we do it just to be conservative.) This CL has a performance benefit for Bazel currently, but has a bigger performance benefit in the following changes, where there are more BuildConfigurationValue.Key objects to compare. PiperOrigin-RevId: 183090122
* Makes @AutoCodec preserve map order when it sees Map or ImmutableMap raw ↵Gravatar shahan2018-01-24
| | | | | | types instead of sorting. PiperOrigin-RevId: 183083445
* Explicitly make fragments option to BuildConfigurationValue#key an ↵Gravatar janakr2018-01-23
| | | | | | | | ImmutableSortedSet wherever possible, and use a known explicit ImmutableSortedSet in the case of two sets being equal. This is mainly a cosmetic cleanup for the sequel changes. Also rename test-only methods in SkyframeExecutor to indicate that, and do a drive-by clean-up of a test that reported hard crashes confusingly because it wrapped RuntimeExceptions. PiperOrigin-RevId: 182984572
* Add new skyfunction to load registered execution platformsGravatar John Cater2018-01-22
| | | | | | | Part of #4442. Change-Id: I49d6d851787727739f50348df2e2ef48392af479 PiperOrigin-RevId: 182795733
* Add option to optionally wipe state at the end of a build.Gravatar ccalvarin2018-01-22
| | | | | | | This will serve as an alternative to --batch, leaving behind a server without state from the previous build. RELNOTES: Introduces --[no]keep_state_after_build PiperOrigin-RevId: 182778500
* Start serializing ArtifactOwner: put in a simple codec for the null artifact ↵Gravatar janakr2018-01-19
| | | | | | owner and fix up BuildConfigurationValue.Key. ConfiguredTargetKey is going to need some modifications to AutoCodec: probably the long-awaited static "create" method. PiperOrigin-RevId: 182630181
* Fix usages of PathFragment segments that will become inefficient.Gravatar tomlu2018-01-19
| | | | | | | An upcoming replacement to PathFragment will not have efficient segment semantics, causing code to become unnecessarily inefficient. RELNOTES: None PiperOrigin-RevId: 182553098
* Rename relativePath -> rootRelativePath in Root and friends.Gravatar tomlu2018-01-19
| | | | | | This makes it clearer that the path fragments in question are relative *to the root*. Confusingly, when the root is absolute, the root relative fragment is also absolute. This makes it a tiny bit clearer that the path fragment may be absolute. PiperOrigin-RevId: 182544893
* Inline rarely used PathFragment methods that do not deserve to be on a core ↵Gravatar tomlu2018-01-19
| | | | | | path class. PiperOrigin-RevId: 182526427
* Prevent broken cache entries on concurrent file changesGravatar ulfjack2018-01-19
| | | | | | | | | | | | | | | | Local execution has an inherent race condition: if a user modifies a file while an action is executed, then it is impossible for Bazel to tell which version of the file was actually read during action execution. The file may have been modified before or after the tool has read it, or, in the worst case, the tool may have read both the original and the modified version. In addition, the file may be changed back to the original state before Bazel can check the file, so computing the digest before / after may not be sufficient. This is a concern for both local and remote caches, although the cost of poisoning a shared remote cache is significantly higher, and is what has triggered this work. Fixes #3360. We solve this by keeping a reference to the FileContentsProxy, and using that to check for modificaitons before storing the cache entry. We output a warning if this check fails. This change does not increase memory consumption; Java objects are always allocated in multiples of 8 bytes, we use compressed oops, and the FileArtifactValue currently has 12 bytes worth of fields (excl. object overhead), so adding another pointer is effectively free. As a possible performance optimization on purely local builds, we could also consider not computing digests at all, and only use the FileContentsProxy for caching. PiperOrigin-RevId: 182510358
* Add a way for BaseCodecs to register association with subtypesGravatar brandjon2018-01-18
| | | | | | Also add accessor to SkylarkInfo for the custom error message, and expose its concrete implementation classes for the benefit of reflection. PiperOrigin-RevId: 182443146
* Remove ConfigurationTransitionProxy.NONE and ↵Gravatar gregce2018-01-18
| | | | | | | | BaseRuleClasses.DYNAMIC_TRANSITION_MAP. This leaves DATA as the last remaining legacy transition. PiperOrigin-RevId: 182422552
* Add absolute root concept.Gravatar tomlu2018-01-18
| | | | | | | | An absolute root accepts any absolute path fragments and simply returns it. This concept replaces the FileSystem root directory concept. PiperOrigin-RevId: 182400471
* Add TestUtils#ConstantStringCodecGravatar brandjon2018-01-18
| | | | | RELNOTES: None PiperOrigin-RevId: 182390511
* Re-add WalkableGraph#isUpToDate and BuildDriver#alreadyEvaluatedGravatar Googler2018-01-18
| | | | | RELNOTES: None PiperOrigin-RevId: 182389876
* Add serialization codec for SkylarkImports. This is needed to serialize ↵Gravatar janakr2018-01-18
| | | | | | | | SkylarkAspectLoadingKey. Also add a @VisibleForSerialization annotation to @AutoCodec, since we're going to need to increase serialization visibility a lot here, and clean up some unnecessary modifiers. PiperOrigin-RevId: 182389162
* Start the process of getting Target out of ConfiguredTarget: add a new ↵Gravatar janakr2018-01-18
| | | | | | | | | | | | container, ConfiguredTargetAndTarget, that can be used to access Targets, and deprecate ConfiguredTarget#getTarget. ConfiguredAndTargetObjects are intended to be limited in scope, not being persisted to Skyframe. The eventual plan is to remove the target field from ConfiguredTarget. This CL is mostly straightforward, except for dealing with AliasConfiguredTargets, which cause some complications. A significant cleanup is still needed before #getTarget can be removed, but I don't see any impossible blockers. We will may still need to store a Target-like object in ConfiguredTarget (that has the RuleClass, or at least a string representation of it, for instance), but that will let us avoid storing a full Target together with its associated Package. PiperOrigin-RevId: 182371566
* Make comment more readable and correct.Gravatar nharmata2018-01-17
| | | | | RELNOTES: None PiperOrigin-RevId: 182272900
* Introduce Root class.Gravatar tomlu2018-01-17
| | | | | | | | | | | This class represents a root (such as a package path or an output root) used for file lookups and artifacts. It is meant to be as opaque as possible in order to hide the user's environment from sky keys and sky functions. Roots are used by RootedPaths and ArtifactRoots. This CL attempts to make the minimum number of modifications necessary to change RootedPath and ArtifactRoot to use these fields. Deprecated methods and invasive accessors are permitted to minimise the risk of any observable changes. RELNOTES: None PiperOrigin-RevId: 182271759
* [Autocodec] Add a ImmutableSetCodec. ImmutableCollections have a deterministicGravatar Googler2018-01-17
| | | | | | iteration order so we should be okay. PiperOrigin-RevId: 182235068
* Codec for Location.Gravatar shahan2018-01-16
| | | | | | * Moves SingletonCodec to third_party. PiperOrigin-RevId: 182143153
* Remove mtime field from FileStateValue.Gravatar janakr2018-01-16
| | | | | | We stopped treating empty files specially in the execution phase after unknown commit. So this code is mostly if not entirely orphaned. The only scenario in which this would lead to a semantic difference that I can think of is if the user is running with --nouse_action_cache and a running Bazel server, and they have an action they want to re-run when an empty input file changes, which isn't something we need to be concerned about. PiperOrigin-RevId: 182109952
* Remove EventBus from SkyframeActionExecutorGravatar ulfjack2018-01-16
| | | | | | Post to the Skyframe Environment instead. PiperOrigin-RevId: 182096559
* Rename Root to ArtifactRoot.Gravatar tomlu2018-01-16
| | | | | | This is slightly more descriptive, and we will potentially want to use the name Root for a broader concept shared between ArtifactRoot and RootedPath. PiperOrigin-RevId: 182082367
* Support array fields in AutoCodec. To do this, introduceGravatar cpeyser2018-01-16
| | | | | | | SerializationCodeGenerator, which is a generalization of Marshaller that supports primitive and array values. PiperOrigin-RevId: 182053617
* Properly report missing external repositiones during pattern evaluation.Gravatar Dmitry Lomov2018-01-15
| | | | | | | Fixes #3836. Change-Id: Icc9e8e08c4336fc20f46b6b878986b991d62ab18 PiperOrigin-RevId: 181949937
* Remove isMainRepo from Root.Gravatar tomlu2018-01-12
| | | | | | This is no longer used. PiperOrigin-RevId: 181754475
* Make FileSymlinkException and InconsistentFSException IOExceptionsGravatar ulfjack2018-01-12
| | | | | | | Most places handle them the same way as IOException, which seems like a safe default. The places that do care can still throw or catch the more specific type. PiperOrigin-RevId: 181719688
* Stop including BuildConfiguration inside ConfiguredTargetKey: it's too ↵Gravatar janakr2018-01-11
| | | | | | heavyweight. For now, put a BuildConfigurationValue.Key in there. In the future, we may want to put some kind of "delta" key in. PiperOrigin-RevId: 181673805
* Convert ActionLookupKey implementations to directly implement SkyKey, ↵Gravatar janakr2018-01-11
| | | | | | removing the layer of indirection of getting SkyKey out of ActionLookupKey, which uses more memory for no reason. PiperOrigin-RevId: 181658615
* Remove BuildConfigurationValue#Key#enableActions field. Saves 8 bytes of ↵Gravatar janakr2018-01-11
| | | | | | memory and some work: BuildOptions#equals and #hashCode already take that value into account, so pulling it out does nothing but slow us down during Key construction. PiperOrigin-RevId: 181645301
* Remove some trivally unneeded usages of FileSystem#getRootDirectory.Gravatar tomlu2018-01-11
| | | | | | Windows doesn't have a root directory, so this abstraction doesn't make sense and should be removed. PiperOrigin-RevId: 181638749
* Adds a CODECs for Package and PackageValue.Gravatar shahan2018-01-11
| | | | PiperOrigin-RevId: 181624201
* Codec for BuildConfigurationValue.Gravatar shahan2018-01-10
| | | | PiperOrigin-RevId: 181545835
* AutoCodec proto marshaller bug fix and support for mutable Map.Gravatar shahan2018-01-10
| | | | PiperOrigin-RevId: 181533491
* AutoCodec's constructor strategy recognizes fields in a (transitive)Gravatar cpeyser2018-01-10
| | | | | | superclass of the class in question. PiperOrigin-RevId: 181524469
* Adds a CODEC for CppConfiguration.Gravatar shahan2018-01-10
| | | | | | | * Creates an enum for cpu transformer, which is easier to serialize than an opaque function. This also means moving FakeCPU to avoid introducing a circular dependency. * Adds a CODEC to Path using InjectingObjectCodec. PiperOrigin-RevId: 181445911
* Adjust semantics of Metadata interface, remove isFile (use getType)Gravatar ulfjack2018-01-10
| | | | | | | | After some consideration, I think it makes sense to always allow a getDigest call, instead of specifying it as disallowed based on type. This is a follow-up CL for a previous CL introducing the getType method, which increased the complexity of the specification. I have a follow-up CL, which is related, namely unknown commit. After that CL, Metadata instances for directories (but not Filesets) also have digests rather than using mtime, which is compatible with the documentation changes made here. Said CL is solving a correctness issue with directory dependencies, which I think we want, and using the digest in the Metadata is a natural way to get correct action cache lookups. PiperOrigin-RevId: 181440548
* Cleanup: move some tests {ArtifactFunction,FileArtifactValue}TestGravatar ulfjack2018-01-09
| | | | | | | | These tests don't require a full Skyframe instance, so we might as well move them to a lighter-weight test class. Also, it turns out that we have duplicate tests for equality and hashing - this is now explicit. PiperOrigin-RevId: 181285144
* Cleanup: remove use of LegacySkyKey for TargetCompletionKeyGravatar ulfjack2018-01-08
| | | | PiperOrigin-RevId: 181141383
* For InjectingObjectCodec, also forwards dependency to serialize.Gravatar shahan2018-01-07
| | | | PiperOrigin-RevId: 181105886
* Deletes FakeAutoCodecProcessor.Gravatar shahan2018-01-07
| | | | | | | This is not needed for bootstrapping, which can be done using the real AutoCodecProcessor anyway. PiperOrigin-RevId: 181099386
* @AutoCodec: allow CONSTRUCTOR strategy to be used with dependency element.Gravatar shahan2018-01-05
| | | | | | | | | | It's very common for a child to need a dependency that the parent does not. This eliminates the need for a `@AutoCodec.Dependency D unusedDependency' constructor parameter. * Adds a marshaller for HashCode. PiperOrigin-RevId: 180989432