From a5add7e361fda5019f9ec8dcc1ddb3952e313256 Mon Sep 17 00:00:00 2001 From: mrinalirao Date: Fri, 2 Dec 2022 12:38:55 +1100 Subject: [PATCH] modify Poll func to pass in backoff interval --- .../cloud/backend_taskStage_taskResults_test.go | 2 +- internal/cloud/backend_taskStages.go | 15 ++++++++++----- internal/cloud/cloud_integration.go | 4 ++-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/internal/cloud/backend_taskStage_taskResults_test.go b/internal/cloud/backend_taskStage_taskResults_test.go index 7e14a15282..d6bc731b34 100644 --- a/internal/cloud/backend_taskStage_taskResults_test.go +++ b/internal/cloud/backend_taskStage_taskResults_test.go @@ -151,7 +151,7 @@ func TestCloud_runTasksWithTaskResults(t *testing.T) { trs := taskResultSummarizer{ cloud: b, } - c.context.Poll(func(i int) (bool, error) { + c.context.Poll(taskStageBackoffMin, taskStageBackoffMax, func(i int) (bool, error) { cont, _, _ := trs.Summarize(c.context, c.writer, c.taskStage()) if cont { return true, nil diff --git a/internal/cloud/backend_taskStages.go b/internal/cloud/backend_taskStages.go index c623d72bb5..719975d7c7 100644 --- a/internal/cloud/backend_taskStages.go +++ b/internal/cloud/backend_taskStages.go @@ -8,6 +8,11 @@ import ( tfe "github.com/hashicorp/go-tfe" ) +const ( + taskStageBackoffMin = 4000.0 + taskStageBackoffMax = 12000.0 +) + type taskStages map[tfe.Stage]*tfe.TaskStage type taskStageSummarizer interface { @@ -67,7 +72,7 @@ func (b *Cloud) runTaskStage(ctx *IntegrationContext, output IntegrationOutputWr summarizers = append(summarizers, s) } - return ctx.Poll(func(i int) (bool, error) { + return ctx.Poll(taskStageBackoffMin, taskStageBackoffMax, func(i int) (bool, error) { options := tfe.TaskStageReadOptions{ Include: []tfe.TaskStageIncludeOpt{tfe.TaskStageTaskResults}, } @@ -88,14 +93,14 @@ func (b *Cloud) runTaskStage(ctx *IntegrationContext, output IntegrationOutputWr errs.Append(err) break } + if !cont { - return false, nil + continue } + // cont is true and we must continue to poll if msg != nil { - if i%4 == 0 && i > 0 { - output.OutputElapsed(*msg, len(*msg)) // Up to 2 digits are allowed by the max message allocation - } + output.OutputElapsed(*msg, len(*msg)) // Up to 2 digits are allowed by the max message allocation } return true, nil } diff --git a/internal/cloud/cloud_integration.go b/internal/cloud/cloud_integration.go index 047fc57093..cd1c6be96a 100644 --- a/internal/cloud/cloud_integration.go +++ b/internal/cloud/cloud_integration.go @@ -38,14 +38,14 @@ type integrationCLIOutput struct { var _ IntegrationOutputWriter = (*integrationCLIOutput)(nil) // Compile time check -func (s *IntegrationContext) Poll(every func(i int) (bool, error)) error { +func (s *IntegrationContext) Poll(backoffMinInterval float64, backoffMaxInterval float64, every func(i int) (bool, error)) error { for i := 0; ; i++ { select { case <-s.StopContext.Done(): return s.StopContext.Err() case <-s.CancelContext.Done(): return s.CancelContext.Err() - case <-time.After(backoff(backoffMin, backoffMax, i)): + case <-time.After(backoff(backoffMinInterval, backoffMaxInterval, i)): // blocks for a time between min and max }