Commit Graph

3970 Commits

Author SHA1 Message Date
Paul Hinze c03e44106f core: band-aid fix for tainted double destroy
After a lot of fun debugging with @mitchellh we finally have a diagnosis
for #1056.

I'm going to attempt to reproduce the diagnosis in prose to test out my
understanding.

----

The `DestroyTransformer` runs twice:

 * `DestroyPrimary` mode creates destroy nodes for normal resources
 * `DestroyTainted` mode creates destroy nodes for tainted resources

These destroy nodes are specializations of `GraphConfigNode`, which has
a `DynamicExpand` step.

In `DynamicExpand` we have a race condition between the normal destroy
node and the tainted destroy node for a given resource when
`CreateBeforeDestroy` is off.

The `DestroyTainted` `GraphConfigNode` must run the `TaintedTransform`
to draw out tainted nodes, since it is reponsible for destroying them
for replacement.

The `DestroyPrimary` `GraphConfigNode` _also_ runs `TaintedTransform` -
this is to catch `Deposed` nodes from CBD, which are piggy backing on
the end of the `Tainted` list.

Here's the bug: when CBD is off and you start an apply with a tainted
resource in your state, both `DestroyPrimary` and `DestroyTainted` catch
it and create their own `graphNodeTaintedResource` in their respective
subgraphs.

If parallelism is disabled, this doesn't happen because the
`DestroyPrimary` subgraph resolves completely before the
`DestroyTainted` node does its `DynamicExpand`, so the `Tainted` list
has been cleared by the time `DestroyTainted` is expanding. With
parallelism, each of these two subgraphs plays out in its own goroutine
simultaneously, and each picks up the tainted resource(s) that the apply
starts with.  So you get two `graphNodeTaintedResource` nodes, and two
destroys.

This band-aid fixes that by skipping the TaintedTransform alltogether in
the `DestroyPrimary` node if CBD is off.

A better fix will follow, which involves reworking the `Deposed` concept
so it no longer piggybacks on `Tainted`.

fixes #1056
2015-02-26 22:32:50 -06:00
Mitchell Hashimoto 5848cba6ad config/lang: add modulo 2015-02-26 15:17:37 -08:00
Jack Pearkes 14066c7629 update changelog 2015-02-26 14:56:27 -08:00
Jack Pearkes 5c74a63f3d Merge pull request #1062 from hashicorp/configure-wait-checks
providers/digitalocean: Configure wait checks
2015-02-26 14:55:24 -08:00
Mitchell Hashimoto 3c4a036fb5 config/lang: add (expr) for order of ops 2015-02-26 14:39:04 -08:00
Mitchell Hashimoto 6750318bb5 config/lang: add test with expressions 2015-02-26 14:34:45 -08:00
Mitchell Hashimoto 9ddcaf15eb config/lang: fix shift/reduce conflict 2015-02-26 14:33:56 -08:00
Mitchell Hashimoto 6f9a358cc4 command/taint: fix comment 2015-02-26 14:30:02 -08:00
Mitchell Hashimoto 07b78fdf84 config/lang: math operations 2015-02-26 14:26:14 -08:00
Jack Pearkes c21c766c3e website: route53 subdomain hosted zones example 2015-02-26 14:20:30 -08:00
Clint e95ebaf6ce Merge pull request #1066 from hashicorp/aws-go-db-param-group-test
provider/aws: convert db param group test to use aws-sdk-go
2015-02-26 16:00:59 -06:00
Clint Shryock 659ddd6fa1 provider/aws: convert db param group test to use aws-sdk-go 2015-02-26 15:54:03 -06:00
Clint Shryock f453d1863a remove helper functions, flatten status in the function 2015-02-26 15:47:30 -06:00
Clint Shryock 561e92e65d provider/aws: Convert db security group test 2015-02-26 15:36:38 -06:00
Jack Pearkes 03cd4ec604 Merge pull request #1061 from hashicorp/digitalocean-droplet-bools
providers/digitalocean: use real bools for droplet creation
2015-02-26 13:28:16 -08:00
Clint Shryock ac8da7a988 provider/aws: Convert AWS DB Security Group to aws-sdk-go
Part 1: converting the test next
2015-02-26 15:08:39 -06:00
Mitchell Hashimoto 684228e371 config/lang: add math operations for ints 2015-02-26 11:32:39 -08:00
Mitchell Hashimoto d411e2939f command/taint: -allow-missing 2015-02-26 10:56:45 -08:00
Mitchell Hashimoto d43c88f5f3 website: update docs for tainted 2015-02-26 10:45:39 -08:00
Mitchell Hashimoto 01aa4236c0 command/taint: support tainting resources in modules 2015-02-26 10:44:25 -08:00
Mitchell Hashimoto fa9b655fd1 website: docs for tainted command 2015-02-26 10:37:08 -08:00
Mitchell Hashimoto b06a88d1ab main: add the taint command 2015-02-26 10:29:51 -08:00
Mitchell Hashimoto 4ec31ecb95 command/taint: new command 2015-02-26 10:29:23 -08:00
Jack Pearkes 8ab4d37f7c providers/digitalocean: be more lenient for droplets 404ing on creation 2015-02-26 10:00:54 -08:00
Jack Pearkes c180487af6 helper/resource: allow configuration of not found checks in state change 2015-02-26 09:59:42 -08:00
Mitchell Hashimoto b3cd1bd5bc terraform: add ResourceState.Taint 2015-02-26 09:58:56 -08:00
Mitchell Hashimoto 341be226f4 terraform: test for various taint cases 2015-02-26 09:50:18 -08:00
Jack Pearkes 74b7137cdc providers/digitalocean: use real bools for droplet creation
Fixes #792
Depends on https://github.com/pearkes/digitalocean/pull/5
2015-02-26 09:37:05 -08:00
Jack Pearkes b7459cbc64 update changelog 2015-02-26 09:21:00 -08:00
Jack Pearkes 7008880ac8 Merge pull request #1057 from hashicorp/digitalocean-droplet-destroy
providers/digitalocean: wait for droplet to be unlocked before destroy
2015-02-26 09:19:33 -08:00
Clint Shryock bd2791824f Update ingress signature 2015-02-26 11:03:56 -06:00
Clint 8c49955fff Merge pull request #1060 from hashicorp/aws-go-db-parameter-group
provider/aws: Convert RDS DB Parameter group to aws-sdk-go
2015-02-26 09:49:24 -06:00
Clint Shryock 242cdc7a29 provider/aws: Convert RDS DB Parameter group to aws-sdk-go 2015-02-26 09:33:33 -06:00
Clint c52ee17e77 Merge pull request #1053 from hashicorp/hashicorp-aws-sdk
provider/aws: Swap awslabs/aws-sdk-go for hashicorp fork
2015-02-26 08:36:16 -06:00
Jack Pearkes 3f217763c7 providers/digitalocean: wait for droplet to be unlocked before destroy 2015-02-25 16:54:39 -08:00
Jack Pearkes f2e92cfeab providers/digitalocean: increase timeout for droplet wait to 60 mins
fixes #325
2015-02-25 16:08:35 -08:00
Jack Pearkes 0ee4e2b46c providers/dme: rename dnsmadeeasy package to dme
This package rename just makes one consistent name across the docs,
packages, and dirs.

cc/ @soniah
2015-02-25 15:54:22 -08:00
Jack Pearkes 777d270f20 update changelog 2015-02-25 14:46:40 -08:00
Jack Pearkes 44f20cad6b dnsmadeeasy: re-organize the bins
cc/ @soniah
2015-02-25 14:45:11 -08:00
Jack Pearkes dfaa428728 Merge pull request #855 from soniah/dme
dme - DNSMadeEasy Provider
2015-02-25 14:38:38 -08:00
Radek Simko e378ea42b8 Prevent empty string to be used as default health_check_type 2015-02-25 21:46:56 +00:00
Clint Shryock f3ba181861 Swap awslabs/aws-sdk-go for hashicorp fork
A temporary change to prevent upstream break while awslabs continues to
refactor.
2015-02-25 15:29:11 -06:00
Clint 06136bd29e Merge pull request #1043 from hashicorp/aws-go-rds-instance
provider/aws: Convert AWS DB Instance to awslabs/aws-sdk-go
2015-02-25 14:13:37 -06:00
Clint Shryock 31236b8f9e Fix zero case 2015-02-25 11:05:14 -06:00
Clint Shryock 5252623656 provider/aws: Remove sentinel value default for RDS instance; default 1 to match API 2015-02-25 10:44:10 -06:00
Clint Shryock bb94eaa50d provider/aws: Fix issue with AWS RDS DB instance which prevented disabling backups 2015-02-25 09:41:05 -06:00
Clint Shryock 5bbb83905e Merge branch 'master' into aws-go-rds-instance
* master:
  terraform: destroy node should not create
2015-02-25 09:21:28 -06:00
Rahul Menon 06b2d0bbf6 VPC Refactor 2015-02-25 17:34:27 +05:30
Rahul Menon 1472f976d7 First refactor 2015-02-25 16:17:55 +05:30
Rahul Menon 38a8232e9a Added Connection to config 2015-02-25 15:04:17 +05:30