77 "fmt"
88 "log"
99 "math/rand"
10+ "strconv"
1011 "strings"
1112 "time"
1213
@@ -139,6 +140,10 @@ func getDefaultExpectedRetryDuration(response oci_common.OCIOperationResponse, d
139140 case 404 :
140141 return 0
141142 case 409 :
143+ if isDisable409Retry , _ := strconv .ParseBool (getEnvSettingWithDefault ("disable_409_retry" , "false" )); isDisable409Retry {
144+ log .Printf ("[ERROR] Resource is in conflict state due to multiple update request: %v" , e .Error ())
145+ return 0
146+ }
142147 if e != nil && (strings .Contains (e .Error (), "InvalidatedRetryToken" ) ||
143148 strings .Contains (e .Error (), "BucketNotEmpty" )) {
144149 return 0
@@ -213,6 +218,7 @@ func getIdentityExpectedRetryDuration(response oci_common.OCIOperationResponse,
213218 if response .Response == nil || response .Response .HTTPResponse () == nil {
214219 return defaultRetryTime
215220 }
221+ e := response .Error
216222 switch statusCode := response .Response .HTTPResponse ().StatusCode ; statusCode {
217223 case 404 :
218224 return 0
@@ -226,6 +232,10 @@ func getIdentityExpectedRetryDuration(response oci_common.OCIOperationResponse,
226232 defaultRetryTime = longRetryTime
227233 }
228234 }
235+ if isDisable409Retry , _ := strconv .ParseBool (getEnvSettingWithDefault ("disable_409_retry" , "false" )); isDisable409Retry {
236+ log .Printf ("[ERROR] Resource is in conflict state due to multiple update request: %v" , e .Error ())
237+ return 0
238+ }
229239 }
230240 return defaultRetryTime
231241}
@@ -244,8 +254,13 @@ func getDatabaseExpectedRetryDuration(response oci_common.OCIOperationResponse,
244254 if response .Response == nil || response .Response .HTTPResponse () == nil {
245255 return defaultRetryTime
246256 }
257+ e := response .Error
247258 switch statusCode := response .Response .HTTPResponse ().StatusCode ; statusCode {
248259 case 409 :
260+ if isDisable409Retry , _ := strconv .ParseBool (getEnvSettingWithDefault ("disable_409_retry" , "false" )); isDisable409Retry {
261+ log .Printf ("[ERROR] Resource is in conflict state due to multiple update request: %v" , e .Error ())
262+ return 0
263+ }
249264 if e := response .Error ; e != nil {
250265 if strings .Contains (e .Error (), "InvalidatedRetryToken" ) {
251266 defaultRetryTime = 0
@@ -271,6 +286,7 @@ func getObjectstorageServiceExpectedRetryDuration(response oci_common.OCIOperati
271286 if response .Response == nil || response .Response .HTTPResponse () == nil {
272287 return defaultRetryTime
273288 }
289+ e := response .Error
274290 switch statusCode := response .Response .HTTPResponse ().StatusCode ; statusCode {
275291 case 404 :
276292 return 0
@@ -280,6 +296,10 @@ func getObjectstorageServiceExpectedRetryDuration(response oci_common.OCIOperati
280296 defaultRetryTime = longRetryTime
281297 }
282298 }
299+ if isDisable409Retry , _ := strconv .ParseBool (getEnvSettingWithDefault ("disable_409_retry" , "false" )); isDisable409Retry {
300+ log .Printf ("[ERROR] Resource is in conflict state due to multiple update request: %v" , e .Error ())
301+ return 0
302+ }
283303 case 500 :
284304 if configuredRetryDuration != nil {
285305 defaultRetryTime = * configuredRetryDuration
0 commit comments