Skip to content

Commit

Permalink
Do retry when GET request return 429.
Browse files Browse the repository at this point in the history
  • Loading branch information
kabesan committed Dec 5, 2019
1 parent 1edb5bf commit 0792516
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 43 deletions.
21 changes: 14 additions & 7 deletions stripe/resource_stripe_coupon.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ package stripe
import (
"fmt"
"log"
"net/http"
"strings"
"time"

"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema"
stripe "github.com/stripe/stripe-go"
"github.com/stripe/stripe-go/client"
Expand Down Expand Up @@ -173,12 +175,17 @@ func resourceStripeCouponCreate(d *schema.ResourceData, m interface{}) error {
}

func resourceStripeCouponRead(d *schema.ResourceData, m interface{}) error {
client := m.(*client.API)
coupon, err := client.Coupons.Get(d.Id(), nil)
return resource.Retry(d.Timeout(schema.TimeoutRead), func() *resource.RetryError {
client := m.(*client.API)
coupon, err := client.Coupons.Get(d.Id(), nil)
if err != nil {
if sErr, ok := err.(*stripe.Error); ok && sErr.HTTPStatusCode == http.StatusTooManyRequests {
return resource.RetryableError(sErr)
}
d.SetId("")
return resource.NonRetryableError(err)
}

if err != nil {
d.SetId("")
} else {
d.Set("code", d.Id())
d.Set("amount_off", coupon.AmountOff)
d.Set("currency", coupon.Currency)
Expand All @@ -197,9 +204,9 @@ func resourceStripeCouponRead(d *schema.ResourceData, m interface{}) error {
d.Set("times_redeemed", coupon.TimesRedeemed)
d.Set("valid", coupon.Valid)
d.Set("created", coupon.Valid)
}

return err
return nil
})
}

func resourceStripeCouponUpdate(d *schema.ResourceData, m interface{}) error {
Expand Down
21 changes: 14 additions & 7 deletions stripe/resource_stripe_plan.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package stripe

import (
"log"
"net/http"

"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema"
stripe "github.com/stripe/stripe-go"
"github.com/stripe/stripe-go/client"
Expand Down Expand Up @@ -205,12 +207,17 @@ func resourceStripePlanCreate(d *schema.ResourceData, m interface{}) error {
}

func resourceStripePlanRead(d *schema.ResourceData, m interface{}) error {
client := m.(*client.API)
plan, err := client.Plans.Get(d.Id(), nil)
return resource.Retry(d.Timeout(schema.TimeoutRead), func() *resource.RetryError {
client := m.(*client.API)
plan, err := client.Plans.Get(d.Id(), nil)
if err != nil {
if sErr, ok := err.(*stripe.Error); ok && sErr.HTTPStatusCode == http.StatusTooManyRequests {
return resource.RetryableError(sErr)
}
d.SetId("")
return resource.NonRetryableError(err)
}

if err != nil {
d.SetId("")
} else {
d.Set("plan_id", plan.ID)
d.Set("active", plan.Active)
d.Set("aggregate_usage", plan.AggregateUsage)
Expand All @@ -226,9 +233,9 @@ func resourceStripePlanRead(d *schema.ResourceData, m interface{}) error {
d.Set("tier", flattenPlanTiers(plan.Tiers))
d.Set("trial_period_days", plan.TrialPeriodDays)
d.Set("usage_type", plan.UsageType)
}

return err
return nil
})
}

func flattenPlanTiers(in []*stripe.PlanTier) []map[string]interface{} {
Expand Down
42 changes: 25 additions & 17 deletions stripe/resource_stripe_product.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package stripe

import (
"net/http"

"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema"
"github.com/stripe/stripe-go"
"github.com/stripe/stripe-go/client"
Expand Down Expand Up @@ -123,23 +126,28 @@ func resourceStripeProductCreate(d *schema.ResourceData, m interface{}) error {
}

func resourceStripeProductRead(d *schema.ResourceData, m interface{}) error {
client := m.(*client.API)
product, err := client.Products.Get(d.Id(), nil)

if err != nil {
return err
}

d.Set("product_id", product.ID)
d.Set("name", product.Name)
d.Set("type", product.Type)
d.Set("active", product.Active)
d.Set("attributes", product.Attributes)
d.Set("metadata", product.Metadata)
d.Set("statement_descriptor", product.StatementDescriptor)
d.Set("unit_label", product.UnitLabel)

return nil
return resource.Retry(d.Timeout(schema.TimeoutRead), func() *resource.RetryError {
client := m.(*client.API)
product, err := client.Products.Get(d.Id(), nil)
if err != nil {
if sErr, ok := err.(*stripe.Error); ok && sErr.HTTPStatusCode == http.StatusTooManyRequests {
return resource.RetryableError(sErr)
}
d.SetId("")
return resource.NonRetryableError(err)
}

d.Set("product_id", product.ID)
d.Set("name", product.Name)
d.Set("type", product.Type)
d.Set("active", product.Active)
d.Set("attributes", product.Attributes)
d.Set("metadata", product.Metadata)
d.Set("statement_descriptor", product.StatementDescriptor)
d.Set("unit_label", product.UnitLabel)

return nil
})
}

func resourceStripeProductUpdate(d *schema.ResourceData, m interface{}) error {
Expand Down
32 changes: 20 additions & 12 deletions stripe/resource_stripe_webhook_endpoint.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package stripe

import (
"net/http"

"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema"
stripe "github.com/stripe/stripe-go"
"github.com/stripe/stripe-go/client"
Expand Down Expand Up @@ -65,18 +68,23 @@ func resourceStripeWebhookEndpointCreate(d *schema.ResourceData, m interface{})
}

func resourceStripeWebhookEndpointRead(d *schema.ResourceData, m interface{}) error {
client := m.(*client.API)
webhookEndpoint, err := client.WebhookEndpoints.Get(d.Id(), nil)

if err != nil {
return err
}

d.Set("url", webhookEndpoint.URL)
d.Set("enabled_events", webhookEndpoint.EnabledEvents)
d.Set("connect", webhookEndpoint.Connect)

return nil
return resource.Retry(d.Timeout(schema.TimeoutRead), func() *resource.RetryError {
client := m.(*client.API)
webhookEndpoint, err := client.WebhookEndpoints.Get(d.Id(), nil)
if err != nil {
if sErr, ok := err.(*stripe.Error); ok && sErr.HTTPStatusCode == http.StatusTooManyRequests {
return resource.RetryableError(sErr)
}
d.SetId("")
return resource.NonRetryableError(err)
}

d.Set("url", webhookEndpoint.URL)
d.Set("enabled_events", webhookEndpoint.EnabledEvents)
d.Set("connect", webhookEndpoint.Connect)

return nil
})
}

func resourceStripeWebhookEndpointUpdate(d *schema.ResourceData, m interface{}) error {
Expand Down

0 comments on commit 0792516

Please sign in to comment.