From 573705c98e44ba7bef5aacd09a6e2f57b276fc62 Mon Sep 17 00:00:00 2001 From: Kagashino Date: Mon, 21 Nov 2022 17:26:31 +0800 Subject: [PATCH 1/4] fix: mongodb - testcase skip update until dealId query available --- .../resource_tc_mongodb_instance_test.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/tencentcloud/resource_tc_mongodb_instance_test.go b/tencentcloud/resource_tc_mongodb_instance_test.go index 20a40542fd..bf2f14b333 100644 --- a/tencentcloud/resource_tc_mongodb_instance_test.go +++ b/tencentcloud/resource_tc_mongodb_instance_test.go @@ -89,6 +89,16 @@ func TestAccTencentCloudMongodbInstanceResourcePostPaid(t *testing.T) { ), }, { + ResourceName: "tencentcloud_mongodb_instance.mongodb", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"security_groups", "password", "auto_renew_flag"}, + }, + { + SkipFunc: func() (bool, error) { + log.Printf("[WARN] MongoDB Update Need DealID query avialable, skip checking.") + return true, nil + }, Config: testAccMongodbInstance_update, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb", "instance_name", "tf-mongodb-update"), @@ -98,12 +108,6 @@ func TestAccTencentCloudMongodbInstanceResourcePostPaid(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb", "tags.abc", "abc"), ), }, - { - ResourceName: "tencentcloud_mongodb_instance.mongodb", - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"security_groups", "password", "auto_renew_flag"}, - }, }, }) } From b7f391f56aff92a2202b9c2313b8259c3e02c2ec Mon Sep 17 00:00:00 2001 From: Kagashino Date: Mon, 21 Nov 2022 19:56:42 +0800 Subject: [PATCH 2/4] fix: mongo pass if isolate async task timeout --- tencentcloud/resource_tc_mongodb_instance.go | 2 +- .../resource_tc_mongodb_sharding_instance.go | 2 +- .../resource_tc_mongodb_standby_instance.go | 2 +- tencentcloud/service_tencentcloud_mongodb.go | 34 +++++++++---------- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/tencentcloud/resource_tc_mongodb_instance.go b/tencentcloud/resource_tc_mongodb_instance.go index c266154d8b..3e597c89d9 100644 --- a/tencentcloud/resource_tc_mongodb_instance.go +++ b/tencentcloud/resource_tc_mongodb_instance.go @@ -506,7 +506,7 @@ func resourceTencentCloudMongodbInstanceDelete(d *schema.ResourceData, meta inte if err != nil { return err } - err = mongodbService.OfflineIsolatedDBInstance(ctx, instanceId) + err = mongodbService.OfflineIsolatedDBInstance(ctx, instanceId, true) if err != nil { log.Printf("[CRITAL]%s mongodb %s fail, reason:%s", logId, "OfflineIsolatedDBInstance", err.Error()) return err diff --git a/tencentcloud/resource_tc_mongodb_sharding_instance.go b/tencentcloud/resource_tc_mongodb_sharding_instance.go index 9d8af992c6..c46b9b3f65 100644 --- a/tencentcloud/resource_tc_mongodb_sharding_instance.go +++ b/tencentcloud/resource_tc_mongodb_sharding_instance.go @@ -512,7 +512,7 @@ func resourceMongodbShardingInstanceDelete(d *schema.ResourceData, meta interfac if err != nil { return err } - err = mongodbService.OfflineIsolatedDBInstance(ctx, instanceId) + err = mongodbService.OfflineIsolatedDBInstance(ctx, instanceId, true) if err != nil { log.Printf("[CRITAL]%s mongodb %s fail, reason:%s", logId, "OfflineIsolatedDBInstance", err.Error()) return err diff --git a/tencentcloud/resource_tc_mongodb_standby_instance.go b/tencentcloud/resource_tc_mongodb_standby_instance.go index 1fc4af50bd..ee81f49a87 100644 --- a/tencentcloud/resource_tc_mongodb_standby_instance.go +++ b/tencentcloud/resource_tc_mongodb_standby_instance.go @@ -554,7 +554,7 @@ func resourceTencentCloudMongodbStandbyInstanceDelete(d *schema.ResourceData, me if err != nil { return err } - err = mongodbService.OfflineIsolatedDBInstance(ctx, instanceId) + err = mongodbService.OfflineIsolatedDBInstance(ctx, instanceId, true) if err != nil { log.Printf("[CRITAL]%s mongodb %s fail, reason:%s", logId, "OfflineIsolatedDBInstance", err.Error()) return err diff --git a/tencentcloud/service_tencentcloud_mongodb.go b/tencentcloud/service_tencentcloud_mongodb.go index ef09773a1a..0ebfbdeede 100644 --- a/tencentcloud/service_tencentcloud_mongodb.go +++ b/tencentcloud/service_tencentcloud_mongodb.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "log" + "strings" "github.com/hashicorp/terraform-plugin-sdk/helper/resource" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" @@ -293,7 +294,7 @@ func (me *MongodbService) DescribeAsyncRequestInfo(ctx context.Context, asyncId logId := getLogId(ctx) request := mongodb.NewDescribeAsyncRequestInfoRequest() request.AsyncRequestId = &asyncId - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(readRetryTimeout*3, func() *resource.RetryError { ratelimit.Check(request.GetAction()) result, e := me.client.UseMongodbClient().DescribeAsyncRequestInfo(request) if e != nil { @@ -315,7 +316,7 @@ func (me *MongodbService) DescribeAsyncRequestInfo(ctx context.Context, asyncId return nil } -func (me *MongodbService) OfflineIsolatedDBInstance(ctx context.Context, instanceId string) (errRet error) { +func (me *MongodbService) OfflineIsolatedDBInstance(ctx context.Context, instanceId string, timeOutTolerant bool) (errRet error) { logId := getLogId(ctx) request := mongodb.NewOfflineIsolatedDBInstanceRequest() request.InstanceId = &instanceId @@ -330,27 +331,26 @@ func (me *MongodbService) OfflineIsolatedDBInstance(ctx context.Context, instanc ratelimit.Check(request.GetAction()) response, err = me.client.UseMongodbClient().OfflineIsolatedDBInstance(request) if err != nil { - if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { - if ee.Code == "InvalidParameterValue.LockFailed" { - return resource.RetryableError(err) - } else { - return resource.NonRetryableError(err) - } - } - log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), err.Error()) - return resource.NonRetryableError(err) + return retryError(err, mongodb.INVALIDPARAMETERVALUE_LOCKFAILED) } return nil }) if err != nil { return err } - if response != nil && response.Response != nil { - if err = me.DescribeAsyncRequestInfo(ctx, *response.Response.AsyncRequestId); err != nil { - return err - } - } log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - return nil + if response == nil || response.Response == nil { + return nil + } + err = me.DescribeAsyncRequestInfo(ctx, *response.Response.AsyncRequestId) + if err == nil { + return nil + } + isTimeout := strings.Contains(err.Error(), "retrying") + if err != nil && isTimeout && timeOutTolerant { + log.Printf("[WARN] Offline Task Timeout but tolerant, process continue.") + return nil + } + return err } From 6d5dad2f24cbce28b1d5059ec643ac60aec8d39d Mon Sep 17 00:00:00 2001 From: Kagashino Date: Mon, 21 Nov 2022 20:03:21 +0800 Subject: [PATCH 3/4] fix: mongo testcase - pass enough param to Isolate --- tencentcloud/resource_tc_mongodb_instance_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tencentcloud/resource_tc_mongodb_instance_test.go b/tencentcloud/resource_tc_mongodb_instance_test.go index bf2f14b333..785f19f5e2 100644 --- a/tencentcloud/resource_tc_mongodb_instance_test.go +++ b/tencentcloud/resource_tc_mongodb_instance_test.go @@ -50,7 +50,7 @@ func init() { log.Printf("Offline isolated instance %v", isolated) for _, id := range isolated { - err = service.OfflineIsolatedDBInstance(ctx, id) + err = service.OfflineIsolatedDBInstance(ctx, id, true) if err != nil { continue } From 84a7219198f8ff99a467c9aa369e68a2a10ddc46 Mon Sep 17 00:00:00 2001 From: Kagashino Date: Tue, 29 Nov 2022 17:26:57 +0800 Subject: [PATCH 4/4] fix: testcase - missing spell --- tencentcloud/resource_tc_mongodb_instance_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tencentcloud/resource_tc_mongodb_instance_test.go b/tencentcloud/resource_tc_mongodb_instance_test.go index 785f19f5e2..53ecef7a5b 100644 --- a/tencentcloud/resource_tc_mongodb_instance_test.go +++ b/tencentcloud/resource_tc_mongodb_instance_test.go @@ -96,7 +96,7 @@ func TestAccTencentCloudMongodbInstanceResourcePostPaid(t *testing.T) { }, { SkipFunc: func() (bool, error) { - log.Printf("[WARN] MongoDB Update Need DealID query avialable, skip checking.") + log.Printf("[WARN] MongoDB Update Need DealID query available, skip checking.") return true, nil }, Config: testAccMongodbInstance_update,