pulumi/pkg/resource
Pat Gavlin d18b59e9c6
Fix a dependency graph bug during DBR. (#3329)
The dependency graph used to determine the set of resources that
depend on a resource being DBR'd is constructured from the list of
resource states present in the old snapshot. However, the dependencies
of resources that are present in both the old snapshot and the current
plan can be different, which in turn can cause the engine to make
incorrect decisions during DBR with respect to which resources need to
be replaced. For example, consider the following program:

```
var resA = new Resource("a", {dbr: "foo"});
var resB = new Resource("b", {dbr: resA.prop});
```

If this program is then changed to:
```
var resB = new Resource("b", {dbr: "<literal value of resA.prop>"});
var resA = new Resource("a", {dbr: "bar"});
```

The engine will first decide to make no changes to "b", as its input
property values have not changed. "b" has changed, however, such that it
no longer has a dependency on "a".

The engine will then decide to DBR "a". In the process, it will
determine that it first needs to delete "b", because the state for "b"
that is used when calculating "a"'s dependents does not reflect the
changes made during the plan.

To fix this issue, we rely on the observation that dependents can only
have been _removed_ from the base dependency graph: for a dependent to
have been added, it would have had to have been registered prior to the
root--a resource it depends on--which is not a valid operation. This
means that any resources that depend on the root must not yet have
been registered, which in turn implies that resources that have already
been registered must not depend on the root. Thus, we ignore these
resources if they are encountered while walking the old dependency graph
to determine the set of dependents.
2019-10-12 17:22:13 -07:00
..
config Encrypt secret values in deployments 2019-05-10 17:07:52 -07:00
deploy Fix a dependency graph bug during DBR. (#3329) 2019-10-12 17:22:13 -07:00
edit Fix a dependency graph bug during DBR. (#3329) 2019-10-12 17:22:13 -07:00
graph Fix a dependency graph bug during DBR. (#3329) 2019-10-12 17:22:13 -07:00
plugin Improve error message when using PAC on out-of-date SDK (#3307) 2019-10-09 13:51:10 -07:00
provider Improve tracing support. (#3238) 2019-09-16 14:16:43 -07:00
stack Cache ciphertext for secret properties. (#3183) 2019-09-18 15:52:31 -07:00
testdata Fix asset bugs; write more tests 2017-10-24 09:00:11 -07:00
asset.go Harden asset and archive deserialization. (#3042) 2019-08-06 16:32:05 -07:00
asset_test.go Correctly handle FileArchives when the filename contains a dot 2019-03-28 13:26:07 -07:00
custom_timeouts.go Update the JSON representation of customTimeouts in state (#3101) 2019-08-21 01:01:27 +03:00
errors.go Add license headers 2018-05-22 15:02:47 -07:00
properties.go Cache ciphertext for secret properties. (#3183) 2019-09-18 15:52:31 -07:00
properties_diff.go Fix a panic during property diffing 2019-05-15 16:20:25 -07:00
properties_diff_test.go Fix a panic during property diffing 2019-05-15 16:20:25 -07:00
properties_path.go Pass ignoreChanges to providers. (#3005) 2019-07-31 11:39:07 -05:00
properties_path_test.go Pass ignoreChanges to providers. (#3005) 2019-07-31 11:39:07 -05:00
properties_test.go Fix conversion of empty array properties. (#3047) 2019-08-07 11:42:40 -07:00
resource_goal.go Allow users to explicitly disable delete-before-replace. (#3118) 2019-08-20 15:51:02 -07:00
resource_id.go Add license headers 2018-05-22 15:02:47 -07:00
resource_id_test.go Adopt golangci-lint and address issues 2018-11-08 14:11:47 -08:00
resource_operation.go Add support for importing existing resources. (#2893) 2019-07-12 11:12:01 -07:00
resource_state.go Addition of Custom Timeouts (#2885) 2019-07-16 00:26:28 +03:00
stack.go Make a smattering of CLI UX improvements 2018-09-24 08:43:46 -07:00
status.go Partial status for resource providers 2018-07-02 13:32:23 -07:00
urn.go Add license headers 2018-05-22 15:02:47 -07:00
urn_test.go Add license headers 2018-05-22 15:02:47 -07:00