Skip to content

Commit

Permalink
Fix google_dns_record_set with same name throw an error (#11622) (has…
Browse files Browse the repository at this point in the history
…hicorp#8139)

[upstream:fae1485a6883c2703183372f2eda1ad0316f9d94]

Signed-off-by: Modular Magician <[email protected]>
  • Loading branch information
modular-magician authored Sep 9, 2024
1 parent 420a015 commit f7841e1
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .changelog/11622.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:bug
dns: added a mutex to `google_dns_record_set` to prevent conflicts when multiple resources attempt to operate on the same record set
```
18 changes: 18 additions & 0 deletions google-beta/services/dns/resource_dns_record_set.go
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,14 @@ func resourceDnsRecordSetCreate(d *schema.ResourceData, meta interface{}) error
chg.Deletions = deletions
}

// Mutex
lockName := fmt.Sprintf("projects/%s/managedZones/%s/rrsets/%s/%s", project, zone, name, rType)
if err != nil {
return err
}
transport_tpg.MutexStore.Lock(lockName)
defer transport_tpg.MutexStore.Unlock(lockName)

log.Printf("[DEBUG] DNS Record create request: %#v", chg)
chg, err = config.NewDnsClient(userAgent).Changes.Create(project, zone, chg).Do()
if err != nil {
Expand Down Expand Up @@ -470,7 +478,9 @@ func resourceDnsRecordSetDelete(d *schema.ResourceData, meta interface{}) error
return err
}

name := d.Get("name").(string)
zone := d.Get("managed_zone").(string)
rType := d.Get("type").(string)

// NS and SOA records on the root zone must always have a value,
// so we short-circuit delete this allows terraform delete to work,
Expand Down Expand Up @@ -513,6 +523,14 @@ func resourceDnsRecordSetDelete(d *schema.ResourceData, meta interface{}) error
},
}

// Mutex
lockName := fmt.Sprintf("projects/%s/managedZones/%s/rrsets/%s/%s", project, zone, name, rType)
if err != nil {
return err
}
transport_tpg.MutexStore.Lock(lockName)
defer transport_tpg.MutexStore.Unlock(lockName)

log.Printf("[DEBUG] DNS Record delete request: %#v", chg)
chg, err = config.NewDnsClient(userAgent).Changes.Create(project, zone, chg).Do()
if err != nil {
Expand Down

0 comments on commit f7841e1

Please sign in to comment.