88 "errors"
99 "fmt"
1010 "strings"
11+ "time"
12+
13+ oci_common "github.com/oracle/oci-go-sdk/v40/common"
1114
1215 "github.com/hashicorp/terraform-plugin-sdk/helper/schema"
1316 "github.com/hashicorp/terraform-plugin-sdk/helper/validation"
@@ -24,11 +27,15 @@ func DatabaseDatabaseResource() *schema.Resource {
2427 Importer : & schema.ResourceImporter {
2528 State : schema .ImportStatePassthrough ,
2629 },
27- Timeouts : DefaultTimeout ,
28- Create : createDatabaseDatabase ,
29- Read : readDatabaseDatabase ,
30- Update : updateDatabaseDatabase ,
31- Delete : deleteDatabaseDatabase ,
30+ Timeouts : & schema.ResourceTimeout {
31+ Create : getTimeoutDuration ("12h" ),
32+ Update : getTimeoutDuration ("2h" ),
33+ Delete : getTimeoutDuration ("2h" ),
34+ },
35+ Create : createDatabaseDatabase ,
36+ Read : readDatabaseDatabase ,
37+ Update : updateDatabaseDatabase ,
38+ Delete : deleteDatabaseDatabase ,
3239 Schema : map [string ]* schema.Schema {
3340 // Required
3441 "database" : {
@@ -454,7 +461,8 @@ func (s *DatabaseDatabaseResourceCrud) Create() error {
454461 return err
455462 }
456463
457- request .RequestMetadata .RetryPolicy = getRetryPolicy (s .DisableNotFoundRetries , "database" )
464+ createDatabaseRetryDurationFn := getdatabaseRetryDurationFunction (s .D .Timeout (schema .TimeoutCreate ))
465+ request .RequestMetadata .RetryPolicy = getRetryPolicy (s .DisableNotFoundRetries , "database" , createDatabaseRetryDurationFn )
458466
459467 response , err := s .Client .CreateDatabase (context .Background (), request )
460468 if err != nil {
@@ -493,7 +501,8 @@ func (s *DatabaseDatabaseResourceCrud) Delete() error {
493501 request .PerformFinalBackup = & tmp
494502 }
495503
496- request .RequestMetadata .RetryPolicy = getRetryPolicy (s .DisableNotFoundRetries , "database" )
504+ deleteDatabaseRetryDurationFn := getdatabaseRetryDurationFunction (s .D .Timeout (schema .TimeoutDelete ))
505+ request .RequestMetadata .RetryPolicy = getRetryPolicy (s .DisableNotFoundRetries , "database" , deleteDatabaseRetryDurationFn )
497506
498507 _ , err := s .Client .DeleteDatabase (context .Background (), request )
499508 return err
@@ -901,7 +910,8 @@ func (s *DatabaseDatabaseResourceCrud) Update() error {
901910 }
902911 }
903912
904- request .RequestMetadata .RetryPolicy = getRetryPolicy (s .DisableNotFoundRetries , "database" )
913+ updateDatabaseRetryDurationFn := getdatabaseRetryDurationFunction (s .D .Timeout (schema .TimeoutUpdate ))
914+ request .RequestMetadata .RetryPolicy = getRetryPolicy (s .DisableNotFoundRetries , "database" , updateDatabaseRetryDurationFn )
905915
906916 response , err := s .Client .UpdateDatabase (context .Background (), request )
907917 if err != nil {
@@ -1078,3 +1088,25 @@ func (s *DatabaseDatabaseResourceCrud) kmsMigration(databaseId string) error {
10781088 }
10791089 return nil
10801090}
1091+
1092+ func getdatabaseRetryDurationFunction (retryTimeout time.Duration ) expectedRetryDurationFn {
1093+ return func (response oci_common.OCIOperationResponse , disableNotFoundRetries bool , service string , optionals ... interface {}) time.Duration {
1094+ defaultRetryTime := getDefaultExpectedRetryDuration (response , disableNotFoundRetries )
1095+ if response .Response == nil || response .Response .HTTPResponse () == nil {
1096+ return defaultRetryTime
1097+ }
1098+ switch statusCode := response .Response .HTTPResponse ().StatusCode ; statusCode {
1099+ case 409 :
1100+ if e := response .Error ; e != nil {
1101+ if strings .Contains (e .Error (), "IncorrectState" ) {
1102+ defaultRetryTime = retryTimeout
1103+ } else if strings .Contains (e .Error (), "InvalidatedRetryToken" ) {
1104+ defaultRetryTime = 0
1105+ } else {
1106+ defaultRetryTime = longRetryTime
1107+ }
1108+ }
1109+ }
1110+ return defaultRetryTime
1111+ }
1112+ }
0 commit comments