Skip to content

Commit 0e76db9

Browse files
Add transformation of SQL DB read error so HandleNotFound works (#3396) (#1972)
Signed-off-by: Modular Magician <[email protected]>
1 parent 56c9aa2 commit 0e76db9

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

.changelog/3396.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
sql: fixed behaviour in `google_sql_database` when the parent instance is deleted, removing it from state
3+
```

google-beta/resource_sql_database.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ func resourceSQLDatabaseRead(d *schema.ResourceData, meta interface{}) error {
176176
}
177177
res, err := sendRequest(config, "GET", project, url, nil)
178178
if err != nil {
179-
return handleNotFoundError(err, d, fmt.Sprintf("SQLDatabase %q", d.Id()))
179+
return handleNotFoundError(transformSQLDatabaseReadError(err), d, fmt.Sprintf("SQLDatabase %q", d.Id()))
180180
}
181181

182182
if err := d.Set("project", project); err != nil {

google-beta/sql_utils.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package google
2+
3+
import (
4+
"log"
5+
"strings"
6+
7+
"github.com/hashicorp/errwrap"
8+
"google.golang.org/api/googleapi"
9+
)
10+
11+
func transformSQLDatabaseReadError(err error) error {
12+
if gErr, ok := errwrap.GetType(err, &googleapi.Error{}).(*googleapi.Error); ok {
13+
if gErr.Code == 400 && strings.Contains(gErr.Message, "Invalid request since instance is not running") {
14+
// This error occurs when attempting a GET after deleting the sql database and sql instance. It leads to to
15+
// inconsistent behavior as handleNotFoundError(...) expects an error code of 404 when a resource does not
16+
// exist. To get the desired behavior from handleNotFoundError, modify the return code to 404 so that
17+
// handleNotFoundError(...) will treat this as a NotFound error
18+
gErr.Code = 404
19+
}
20+
21+
log.Printf("[DEBUG] Transformed SQLDatabase error")
22+
return gErr
23+
}
24+
25+
return err
26+
}

0 commit comments

Comments
 (0)