Skip to content

Commit

Permalink
Fixed logic for add lifecycle rules (#1553)
Browse files Browse the repository at this point in the history
- Removed support to fixed date lifecycle rules according resolution of #1527

Signed-off-by: Benjamin Perez <benjamin@bexsoft.net>

Co-authored-by: Benjamin Perez <benjamin@bexsoft.net>
Co-authored-by: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com>
  • Loading branch information
3 people authored Feb 11, 2022
1 parent 5fd82ca commit 6a7f042
Show file tree
Hide file tree
Showing 6 changed files with 113 additions and 71 deletions.
58 changes: 58 additions & 0 deletions models/add_bucket_lifecycle.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ const AddLifecycleModal = ({
}

const lifecycleInsert = {
type: ilmType,
prefix,
tags,
expired_object_delete_marker: expiredObjectDM,
Expand Down
16 changes: 16 additions & 0 deletions restapi/embedded_spec.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

100 changes: 29 additions & 71 deletions restapi/user_buckets_lifecycle.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,57 +161,28 @@ func addBucketLifecycle(ctx context.Context, client MinioClient, params user_api

opts := ilm.LifecycleOptions{}

// Verify if transition items are set
if params.Body.ExpiryDate == "" && params.Body.ExpiryDays == 0 {
if params.Body.TransitionDate != "" && params.Body.TransitionDays != 0 {
return errors.New("only one transition configuration can be set (days or date)")
}

if params.Body.ExpiryDate != "" || params.Body.ExpiryDays != 0 {
return errors.New("expiry cannot be set when transition is being configured")
}

if params.Body.NoncurrentversionExpirationDays != 0 {
return errors.New("non current version Expiration Days cannot be set when transition is being configured")
}

if params.Body.TransitionDate != "" {
opts = ilm.LifecycleOptions{
ID: id,
Prefix: params.Body.Prefix,
Status: !params.Body.Disable,
IsTagsSet: params.Body.Tags != "",
Tags: params.Body.Tags,
TransitionDate: params.Body.TransitionDate,
StorageClass: strings.ToUpper(params.Body.StorageClass),
ExpiredObjectDeleteMarker: params.Body.ExpiredObjectDeleteMarker,
NoncurrentVersionTransitionDays: int(params.Body.NoncurrentversionTransitionDays),
NoncurrentVersionTransitionStorageClass: strings.ToUpper(params.Body.NoncurrentversionTransitionStorageClass),
}
} else if params.Body.TransitionDays != 0 {
opts = ilm.LifecycleOptions{
ID: id,
Prefix: params.Body.Prefix,
Status: !params.Body.Disable,
IsTagsSet: params.Body.Tags != "",
Tags: params.Body.Tags,
TransitionDays: strconv.Itoa(int(params.Body.TransitionDays)),
StorageClass: strings.ToUpper(params.Body.StorageClass),
ExpiredObjectDeleteMarker: params.Body.ExpiredObjectDeleteMarker,
NoncurrentVersionTransitionDays: int(params.Body.NoncurrentversionTransitionDays),
NoncurrentVersionTransitionStorageClass: strings.ToUpper(params.Body.NoncurrentversionTransitionStorageClass),
}
}
} else if params.Body.TransitionDate == "" && params.Body.TransitionDays == 0 {
// Verify if expiry items are set
if params.Body.ExpiryDate != "" && params.Body.ExpiryDays != 0 {
// Verify if transition rule is requested
if params.Body.Type == models.AddBucketLifecycleTypeTransition {
if params.Body.TransitionDays == 0 && params.Body.NoncurrentversionTransitionDays == 0 {
return errors.New("only one expiry configuration can be set (days or date)")
}

if params.Body.TransitionDate != "" || params.Body.TransitionDays != 0 {
return errors.New("transition cannot be set when expiry is being configured")
opts = ilm.LifecycleOptions{
ID: id,
Prefix: params.Body.Prefix,
Status: !params.Body.Disable,
IsTagsSet: params.Body.Tags != "",
Tags: params.Body.Tags,
TransitionDays: strconv.Itoa(int(params.Body.TransitionDays)),
StorageClass: strings.ToUpper(params.Body.StorageClass),
ExpiredObjectDeleteMarker: params.Body.ExpiredObjectDeleteMarker,
NoncurrentVersionTransitionDays: int(params.Body.NoncurrentversionTransitionDays),
NoncurrentVersionTransitionStorageClass: strings.ToUpper(params.Body.NoncurrentversionTransitionStorageClass),
IsTransitionDaysSet: params.Body.TransitionDays != 0,
IsNoncurrentVersionTransitionDaysSet: params.Body.NoncurrentversionTransitionDays != 0,
}

} else if params.Body.Type == models.AddBucketLifecycleTypeExpiry {
// Verify if expiry items are set
if params.Body.NoncurrentversionTransitionDays != 0 {
return errors.New("non current version Transition Days cannot be set when expiry is being configured")
}
Expand All @@ -220,33 +191,20 @@ func addBucketLifecycle(ctx context.Context, client MinioClient, params user_api
return errors.New("non current version Transition Storage Class cannot be set when expiry is being configured")
}

if params.Body.ExpiryDate != "" {
opts = ilm.LifecycleOptions{
ID: id,
Prefix: params.Body.Prefix,
Status: !params.Body.Disable,
IsTagsSet: params.Body.Tags != "",
Tags: params.Body.Tags,
ExpiryDate: params.Body.ExpiryDate,
ExpiredObjectDeleteMarker: params.Body.ExpiredObjectDeleteMarker,
NoncurrentVersionExpirationDays: int(params.Body.NoncurrentversionExpirationDays),
}
} else if params.Body.ExpiryDays != 0 {
opts = ilm.LifecycleOptions{
ID: id,
Prefix: params.Body.Prefix,
Status: !params.Body.Disable,
IsTagsSet: params.Body.Tags != "",
Tags: params.Body.Tags,
ExpiryDays: strconv.Itoa(int(params.Body.ExpiryDays)),
ExpiredObjectDeleteMarker: params.Body.ExpiredObjectDeleteMarker,
NoncurrentVersionExpirationDays: int(params.Body.NoncurrentversionExpirationDays),
}
opts = ilm.LifecycleOptions{
ID: id,
Prefix: params.Body.Prefix,
Status: !params.Body.Disable,
IsTagsSet: params.Body.Tags != "",
Tags: params.Body.Tags,
ExpiryDays: strconv.Itoa(int(params.Body.ExpiryDays)),
ExpiredObjectDeleteMarker: params.Body.ExpiredObjectDeleteMarker,
NoncurrentVersionExpirationDays: int(params.Body.NoncurrentversionExpirationDays),
}

} else {
// Non set, we return error
return errors.New("no valid configuration is set")
return errors.New("no valid configuration requested")
}

var err2 *probe.Error
Expand Down Expand Up @@ -335,7 +293,7 @@ func editBucketLifecycle(ctx context.Context, client MinioClient, params user_ap

} else {
// Non set, we return error
return errors.New("transition and expiry cannot be set for the same rule")
return errors.New("no valid configuration requested")
}

var err2 *probe.Error
Expand Down
3 changes: 3 additions & 0 deletions restapi/user_buckets_lifecycle_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,9 +163,12 @@ func TestSetLifecycleRule(t *testing.T) {
return &mockLifecycle, nil
}

expiryRule := "expiry"

insertMock := user_api.AddBucketLifecycleParams{
BucketName: "testBucket",
Body: &models.AddBucketLifecycle{
Type: expiryRule,
Disable: false,
ExpiredObjectDeleteMarker: false,
ExpiryDays: int32(16),
Expand Down
6 changes: 6 additions & 0 deletions swagger-console.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3888,6 +3888,12 @@ definitions:
addBucketLifecycle:
type: object
properties:
type:
description: ILM Rule type (Expiry or transition)
type: string
enum:
- expiry
- transition
prefix:
description: Non required field, it matches a prefix to perform ILM operations on it
type: string
Expand Down

0 comments on commit 6a7f042

Please sign in to comment.