@@ -28,35 +28,48 @@ func handleNotFoundError(err error, d *schema.ResourceData, resource string) err
28
28
}
29
29
30
30
func retry (retryFunc func () error , minutes int ) error {
31
- return retryTime (retryFunc , minutes , false , false )
31
+ return retryTime (retryFunc , minutes , false , false , false )
32
32
}
33
33
34
34
func retryNotFound (retryFunc func () error , minutes int ) error {
35
- return retryTime (retryFunc , minutes , true , false )
35
+ return retryTime (retryFunc , minutes , true , false , false )
36
+ }
37
+
38
+ func retryInvalid (retryFunc func () error , minutes int ) error {
39
+ return retryTime (retryFunc , minutes , false , false , true )
36
40
}
37
41
38
42
func retryPassDuplicate (retryFunc func () error , minutes int ) error {
39
- return retryTime (retryFunc , minutes , true , true )
43
+ return retryTime (retryFunc , minutes , true , true , false )
40
44
}
41
45
42
- func retryTime (retryFunc func () error , minutes int , retryNotFound bool , retryPassDuplicate bool ) error {
46
+ func retryTime (retryFunc func () error , minutes int , retryNotFound bool , retryPassDuplicate bool , retryInvalid bool ) error {
43
47
wait := 1
44
48
return resource .Retry (time .Duration (minutes )* time .Minute , func () * resource.RetryError {
45
49
err := retryFunc ()
46
50
if err == nil {
47
51
return nil
48
52
}
53
+
49
54
rand .Seed (time .Now ().UnixNano ())
50
55
randomNumberMiliseconds := rand .Intn (1001 )
56
+
57
+ if gerr , ok := err .(* googleapi.Error ); ok && (gerr .Code == 500 || gerr .Code == 502 || gerr .Code == 503 ) {
58
+ log .Printf ("[DEBUG] Retrying server error code..." )
59
+ time .Sleep (time .Duration (wait )* time .Second + time .Duration (randomNumberMiliseconds ))
60
+ wait = wait * 2
61
+ return resource .RetryableError (gerr )
62
+ }
63
+
51
64
if retryPassDuplicate {
52
- if gerr , ok := err .(* googleapi.Error ); ok && (gerr .Errors [0 ].Reason == "quotaExceeded" || gerr .Code == 401 || gerr .Code == 429 || gerr . Code == 500 || gerr . Code == 502 || gerr . Code == 503 ) {
65
+ if gerr , ok := err .(* googleapi.Error ); ok && (gerr .Errors [0 ].Reason == "quotaExceeded" || gerr .Code == 401 || gerr .Code == 429 ) {
53
66
log .Printf ("[DEBUG] Retrying quota/server error code..." )
54
67
time .Sleep (time .Duration (wait )* time .Second + time .Duration (randomNumberMiliseconds ))
55
68
wait = wait * 2
56
69
return resource .RetryableError (gerr )
57
70
}
58
71
} else {
59
- if gerr , ok := err .(* googleapi.Error ); ok && (gerr .Errors [0 ].Reason == "quotaExceeded" || gerr .Code == 401 || gerr .Code == 409 || gerr .Code == 429 || gerr . Code == 500 || gerr . Code == 502 || gerr . Code == 503 ) {
72
+ if gerr , ok := err .(* googleapi.Error ); ok && (gerr .Errors [0 ].Reason == "quotaExceeded" || gerr .Code == 401 || gerr .Code == 409 || gerr .Code == 429 ) {
60
73
log .Printf ("[DEBUG] Retrying quota/server error code..." )
61
74
time .Sleep (time .Duration (wait )* time .Second + time .Duration (randomNumberMiliseconds ))
62
75
wait = wait * 2
@@ -72,6 +85,15 @@ func retryTime(retryFunc func() error, minutes int, retryNotFound bool, retryPas
72
85
}
73
86
}
74
87
88
+ if retryInvalid {
89
+ if gerr , ok := err .(* googleapi.Error ); ok && (gerr .Errors [0 ].Reason == "invalid" || gerr .Code == 400 ) {
90
+ log .Printf ("[DEBUG] Retrying invalid error code..." )
91
+ time .Sleep (time .Duration (wait )* time .Second + time .Duration (randomNumberMiliseconds ))
92
+ wait = wait * 2
93
+ return resource .RetryableError (gerr )
94
+ }
95
+ }
96
+
75
97
// Deal with the broken API
76
98
if strings .Contains (fmt .Sprintf ("%s" , err ), "Invalid Input: Bad request for \" " ) && strings .Contains (fmt .Sprintf ("%s" , err ), "\" code\" :400" ) {
77
99
log .Printf ("[DEBUG] Retrying invalid response from API" )
@@ -85,10 +107,6 @@ func retryTime(retryFunc func() error, minutes int, retryNotFound bool, retryPas
85
107
log .Printf ("[DEBUG] Retrying due to eventual consistency" )
86
108
return resource .RetryableError (err )
87
109
}
88
- if strings .Contains (fmt .Sprintf ("%s" , err ), "Invalid Value, invalid" ) {
89
- log .Printf ("[DEBUG] G Suite API could be tripping up, retrying" )
90
- return resource .RetryableError (err )
91
- }
92
110
93
111
return resource .NonRetryableError (err )
94
112
})
0 commit comments