From b9022dc10da5ac46fc629aadcd93c7c5649711ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tilo=20K=C3=B6rner?= <70266685+tiloKo@users.noreply.github.com> Date: Mon, 24 Jun 2024 14:49:40 +0200 Subject: [PATCH] Publish TargetVector enhanced retry (#4971) * cache Error, increase max polling duration * Update abapAddonAssemblyKitPublishTargetVector_generated.go --- ...bapAddonAssemblyKitPublishTargetVector_generated.go | 4 ++-- pkg/abap/aakaas/targetVector.go | 10 ++++++++-- .../abapAddonAssemblyKitPublishTargetVector.yaml | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/cmd/abapAddonAssemblyKitPublishTargetVector_generated.go b/cmd/abapAddonAssemblyKitPublishTargetVector_generated.go index b9538a77d..239fbf27b 100644 --- a/cmd/abapAddonAssemblyKitPublishTargetVector_generated.go +++ b/cmd/abapAddonAssemblyKitPublishTargetVector_generated.go @@ -143,7 +143,7 @@ func addAbapAddonAssemblyKitPublishTargetVectorFlags(cmd *cobra.Command, stepCon cmd.Flags().StringVar(&stepConfig.Username, "username", os.Getenv("PIPER_username"), "User for the Addon Assembly Kit as a Service (AAKaaS) system") cmd.Flags().StringVar(&stepConfig.Password, "password", os.Getenv("PIPER_password"), "Password for the Addon Assembly Kit as a Service (AAKaaS) system") cmd.Flags().StringVar(&stepConfig.TargetVectorScope, "targetVectorScope", `T`, "Determines whether the Target Vector is published to the productive ('P') or test ('T') environment") - cmd.Flags().IntVar(&stepConfig.MaxRuntimeInMinutes, "maxRuntimeInMinutes", 16, "Maximum runtime for status polling in minutes") + cmd.Flags().IntVar(&stepConfig.MaxRuntimeInMinutes, "maxRuntimeInMinutes", 90, "Maximum runtime for status polling in minutes") cmd.Flags().IntVar(&stepConfig.PollingIntervalInSeconds, "pollingIntervalInSeconds", 60, "Wait time in seconds between polling calls") cmd.Flags().StringVar(&stepConfig.AddonDescriptor, "addonDescriptor", os.Getenv("PIPER_addonDescriptor"), "Structure in the commonPipelineEnvironment containing information about the Product Version and corresponding Software Component Versions") cmd.Flags().StringVar(&stepConfig.AbapAddonAssemblyKitOriginHash, "abapAddonAssemblyKitOriginHash", os.Getenv("PIPER_abapAddonAssemblyKitOriginHash"), "Origin Hash for restricted AAKaaS scenarios") @@ -241,7 +241,7 @@ func abapAddonAssemblyKitPublishTargetVectorMetadata() config.StepData { Type: "int", Mandatory: false, Aliases: []config.Alias{}, - Default: 16, + Default: 90, }, { Name: "pollingIntervalInSeconds", diff --git a/pkg/abap/aakaas/targetVector.go b/pkg/abap/aakaas/targetVector.go index 29f48b33e..6043d29fd 100644 --- a/pkg/abap/aakaas/targetVector.go +++ b/pkg/abap/aakaas/targetVector.go @@ -155,12 +155,17 @@ func (tv *TargetVector) GetTargetVector(conn *abapbuild.Connector) error { // PollForStatus : Poll AAKaaS until final PublishStatus reached and check if desired Status was reached func (tv *TargetVector) PollForStatus(conn *abapbuild.Connector, targetStatus TargetVectorStatus) error { + var cachedError error timeout := time.After(conn.MaxRuntime) ticker := time.Tick(conn.PollingInterval) for { select { case <-timeout: - return errors.New("Timed out (AAKaaS target Vector Status change)") + if cachedError == nil { + return errors.New("Timed out (AAKaaS target Vector Status change)") + } else { + return cachedError + } case <-ticker: if err := tv.GetTargetVector(conn); err != nil { return errors.Wrap(err, "Getting TargetVector status during polling resulted in an error") @@ -172,7 +177,8 @@ func (tv *TargetVector) PollForStatus(conn *abapbuild.Connector, targetStatus Ta if TargetVectorStatus(tv.Status) == targetStatus { return nil } else { - return errors.New("Publishing of Targetvector " + tv.ID + " resulted in state " + string(tv.Status) + " instead of expected state " + string(targetStatus)) + cachedError = errors.New("Publishing of Targetvector " + tv.ID + " resulted in state " + string(tv.Status) + " instead of expected state " + string(targetStatus)) + continue } case TargetVectorPublishStatusError: return errors.New("Publishing of Targetvector " + tv.ID + " failed in AAKaaS") diff --git a/resources/metadata/abapAddonAssemblyKitPublishTargetVector.yaml b/resources/metadata/abapAddonAssemblyKitPublishTargetVector.yaml index 6fd3bb0fd..1dfc73099 100644 --- a/resources/metadata/abapAddonAssemblyKitPublishTargetVector.yaml +++ b/resources/metadata/abapAddonAssemblyKitPublishTargetVector.yaml @@ -88,7 +88,7 @@ spec: - STAGES - STEPS - GENERAL - default: 16 + default: 90 - name: pollingIntervalInSeconds type: int description: Wait time in seconds between polling calls