From 5c4b829cb81bad0bc8449cdd6e9fd76b7cc1e5af Mon Sep 17 00:00:00 2001 From: The Magician Date: Wed, 20 Jan 2021 11:53:05 -0800 Subject: [PATCH] support retry logic on healthcare dataset (#4412) (#2885) Signed-off-by: Modular Magician --- .changelog/4412.txt | 3 +++ google-beta/error_retry_predicates.go | 9 +++++++++ google-beta/resource_dataflow_flex_template_job_test.go | 2 +- google-beta/resource_healthcare_dataset.go | 8 ++++---- .../resource_healthcare_dataset_generated_test.go | 2 +- 5 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 .changelog/4412.txt diff --git a/.changelog/4412.txt b/.changelog/4412.txt new file mode 100644 index 0000000000..7361507bdf --- /dev/null +++ b/.changelog/4412.txt @@ -0,0 +1,3 @@ +```release-note:bug +healthcare: add retry logic on healthcare dataset not initialized error +``` diff --git a/google-beta/error_retry_predicates.go b/google-beta/error_retry_predicates.go index f7f1fe9c52..5aad56565d 100644 --- a/google-beta/error_retry_predicates.go +++ b/google-beta/error_retry_predicates.go @@ -315,3 +315,12 @@ func iapClient409Operation(err error) (bool, string) { } return false, "" } + +func healthcareDatasetNotInitialized(err error) (bool, string) { + if gerr, ok := err.(*googleapi.Error); ok { + if gerr.Code == 404 && strings.Contains(strings.ToLower(gerr.Body), "dataset not initialized") { + return true, "dataset not initialized - retrying" + } + } + return false, "" +} diff --git a/google-beta/resource_dataflow_flex_template_job_test.go b/google-beta/resource_dataflow_flex_template_job_test.go index df04d28bb0..0d037482e0 100644 --- a/google-beta/resource_dataflow_flex_template_job_test.go +++ b/google-beta/resource_dataflow_flex_template_job_test.go @@ -8,7 +8,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" - "google.golang.org/api/compute/v1" + compute "google.golang.org/api/compute/v1" ) func TestAccDataflowFlexTemplateJob_basic(t *testing.T) { diff --git a/google-beta/resource_healthcare_dataset.go b/google-beta/resource_healthcare_dataset.go index 3367255b23..8cc03b6290 100644 --- a/google-beta/resource_healthcare_dataset.go +++ b/google-beta/resource_healthcare_dataset.go @@ -118,7 +118,7 @@ func resourceHealthcareDatasetCreate(d *schema.ResourceData, meta interface{}) e billingProject = bp } - res, err := sendRequestWithTimeout(config, "POST", billingProject, url, userAgent, obj, d.Timeout(schema.TimeoutCreate)) + res, err := sendRequestWithTimeout(config, "POST", billingProject, url, userAgent, obj, d.Timeout(schema.TimeoutCreate), healthcareDatasetNotInitialized) if err != nil { return fmt.Errorf("Error creating Dataset: %s", err) } @@ -160,7 +160,7 @@ func resourceHealthcareDatasetRead(d *schema.ResourceData, meta interface{}) err billingProject = bp } - res, err := sendRequest(config, "GET", billingProject, url, userAgent, nil) + res, err := sendRequest(config, "GET", billingProject, url, userAgent, nil, healthcareDatasetNotInitialized) if err != nil { return handleNotFoundError(err, d, fmt.Sprintf("HealthcareDataset %q", d.Id())) } @@ -237,7 +237,7 @@ func resourceHealthcareDatasetUpdate(d *schema.ResourceData, meta interface{}) e billingProject = bp } - res, err := sendRequestWithTimeout(config, "PATCH", billingProject, url, userAgent, obj, d.Timeout(schema.TimeoutUpdate)) + res, err := sendRequestWithTimeout(config, "PATCH", billingProject, url, userAgent, obj, d.Timeout(schema.TimeoutUpdate), healthcareDatasetNotInitialized) if err != nil { return fmt.Errorf("Error updating Dataset %q: %s", d.Id(), err) @@ -276,7 +276,7 @@ func resourceHealthcareDatasetDelete(d *schema.ResourceData, meta interface{}) e billingProject = bp } - res, err := sendRequestWithTimeout(config, "DELETE", billingProject, url, userAgent, obj, d.Timeout(schema.TimeoutDelete)) + res, err := sendRequestWithTimeout(config, "DELETE", billingProject, url, userAgent, obj, d.Timeout(schema.TimeoutDelete), healthcareDatasetNotInitialized) if err != nil { return handleNotFoundError(err, d, "Dataset") } diff --git a/google-beta/resource_healthcare_dataset_generated_test.go b/google-beta/resource_healthcare_dataset_generated_test.go index 4d5021c0ba..3778fc0f5b 100644 --- a/google-beta/resource_healthcare_dataset_generated_test.go +++ b/google-beta/resource_healthcare_dataset_generated_test.go @@ -84,7 +84,7 @@ func testAccCheckHealthcareDatasetDestroyProducer(t *testing.T) func(s *terrafor billingProject = config.BillingProject } - _, err = sendRequest(config, "GET", billingProject, url, config.userAgent, nil) + _, err = sendRequest(config, "GET", billingProject, url, config.userAgent, nil, healthcareDatasetNotInitialized) if err == nil { return fmt.Errorf("HealthcareDataset still exists at %s", url) }