From 4345651ebe32980449599f3e01cf57c56fd72e88 Mon Sep 17 00:00:00 2001 From: AlbeeSo Date: Fri, 12 Apr 2024 00:57:05 +0800 Subject: [PATCH] fix: fix setBucketLifecycleRule error in OSS Artifact Driver and modified lifecycle rule Signed-off-by: AlbeeSo --- workflow/artifacts/oss/oss.go | 38 +++++++++++++++++------------------ 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/workflow/artifacts/oss/oss.go b/workflow/artifacts/oss/oss.go index be2087d04fa69..3cb8b86cc2e51 100644 --- a/workflow/artifacts/oss/oss.go +++ b/workflow/artifacts/oss/oss.go @@ -16,7 +16,6 @@ import ( "github.com/aliyun/credentials-go/credentials" log "github.com/sirupsen/logrus" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/utils/pointer" "github.com/argoproj/argo-workflows/v3/errors" wfv1 "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1" @@ -317,33 +316,32 @@ func setBucketLifecycleRule(client *oss.Client, ossArtifact *wfv1.OSSArtifact) e return fmt.Errorf("markInfrequentAccessAfterDays cannot be large than markDeletionAfterDays") } - // Set expiration rule. - expirationRule := oss.BuildLifecycleRuleByDays("expiration-rule", ossArtifact.Key, true, markInfrequentAccessAfterDays) - // Automatically delete the expired delete tag so we don't have to manage it ourselves. + // Delete the current version objects after a period of time. + // If BucketVersioning is enbaled, the objects will turn to non-current version. expiration := oss.LifecycleExpiration{ - ExpiredObjectDeleteMarker: pointer.Bool(true), + Days: markDeletionAfterDays, } // Convert to Infrequent Access (IA) storage type for objects that are expired after a period of time. - versionTransition := oss.LifecycleVersionTransition{ - NoncurrentDays: markInfrequentAccessAfterDays, - StorageClass: oss.StorageIA, + transition := oss.LifecycleTransition{ + Days: markInfrequentAccessAfterDays, + StorageClass: oss.StorageIA, } - // Mark deletion after a period of time. - versionExpiration := oss.LifecycleVersionExpiration{ - NoncurrentDays: markDeletionAfterDays, + // Delete the aborted uploaded parts after a period of time. + abortMultipartUpload := oss.LifecycleAbortMultipartUpload{ + Days: markDeletionAfterDays, } - versionTransitionRule := oss.LifecycleRule{ - ID: "version-transition-rule", - Prefix: ossArtifact.Key, - Status: string(oss.VersionEnabled), - Expiration: &expiration, - NonVersionExpiration: &versionExpiration, - NonVersionTransitions: []oss.LifecycleVersionTransition{versionTransition}, + + rule := oss.LifecycleRule{ + ID: "argo-workflows-rule", + Prefix: ossArtifact.Key, + Status: string(oss.VersionEnabled), + Expiration: &expiration, + Transitions: []oss.LifecycleTransition{transition}, + AbortMultipartUpload: &abortMultipartUpload, } // Set lifecycle rules to the bucket. - rules := []oss.LifecycleRule{expirationRule, versionTransitionRule} - err := client.SetBucketLifecycle(ossArtifact.Bucket, rules) + err := client.SetBucketLifecycle(ossArtifact.Bucket, []oss.LifecycleRule{rule}) return err }