Add transition event notification (#11047)

This is a MinIO specific extension to allow monitoring of transition events.
This commit is contained in:
Poorna Krishnamoorthy 2020-12-07 13:53:28 -08:00 committed by GitHub
parent 038bcd9079
commit 934bed47fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 40 additions and 4 deletions

View File

@ -356,11 +356,23 @@ func transitionObject(ctx context.Context, objectAPI ObjectLayer, objInfo Object
opts.Versioned = globalBucketVersioningSys.Enabled(oi.Bucket) opts.Versioned = globalBucketVersioningSys.Enabled(oi.Bucket)
opts.VersionID = oi.VersionID opts.VersionID = oi.VersionID
opts.TransitionStatus = lifecycle.TransitionComplete opts.TransitionStatus = lifecycle.TransitionComplete
eventName := event.ObjectTransitionComplete
if _, err = objectAPI.DeleteObject(ctx, oi.Bucket, oi.Name, opts); err != nil { _, err = objectAPI.DeleteObject(ctx, oi.Bucket, oi.Name, opts)
return err if err != nil {
eventName = event.ObjectTransitionFailed
} }
return nil // Notify object deleted event.
sendEvent(eventArgs{
EventName: eventName,
BucketName: oi.Bucket,
Object: ObjectInfo{
Name: oi.Name,
VersionID: opts.VersionID,
},
Host: "Internal: [ILM-Transition]",
})
return err
} }
// getLifecycleTransitionTargetArn returns transition ARN for storage class specified in the config. // getLifecycleTransitionTargetArn returns transition ARN for storage class specified in the config.

View File

@ -127,6 +127,11 @@ aws s3api restore-object --bucket srcbucket \
--restore-request Days=3 --restore-request Days=3
``` ```
### 4.1 Monitoring transition events
`s3:ObjectTransition:Complete` and `s3:ObjectTransition:Failed` events can be used to monitor transition events between the source cluster and transition tier. To watch lifecycle events, you can enable bucket notification on the source bucket with `mc event add` and specify `--event ilm` flag.
Note that transition event notification is a MinIO extension.
## Explore Further ## Explore Further
- [MinIO | Golang Client API Reference](https://docs.min.io/docs/golang-client-api-reference.html#SetBucketLifecycle) - [MinIO | Golang Client API Reference](https://docs.min.io/docs/golang-client-api-reference.html#SetBucketLifecycle)
- [Object Lifecycle Management](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html) - [Object Lifecycle Management](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html)

View File

@ -55,6 +55,9 @@ const (
ObjectRestorePostInitiated ObjectRestorePostInitiated
ObjectRestorePostCompleted ObjectRestorePostCompleted
ObjectRestorePostAll ObjectRestorePostAll
ObjectTransitionAll
ObjectTransitionFailed
ObjectTransitionComplete
) )
// Expand - returns expanded values of abbreviated event type. // Expand - returns expanded values of abbreviated event type.
@ -94,6 +97,11 @@ func (name Name) Expand() []Name {
ObjectRestorePostInitiated, ObjectRestorePostInitiated,
ObjectRestorePostCompleted, ObjectRestorePostCompleted,
} }
case ObjectTransitionAll:
return []Name{
ObjectTransitionFailed,
ObjectTransitionComplete,
}
default: default:
return []Name{name} return []Name{name}
} }
@ -152,6 +160,12 @@ func (name Name) String() string {
return "s3:ObjectRestore:Post" return "s3:ObjectRestore:Post"
case ObjectRestorePostCompleted: case ObjectRestorePostCompleted:
return "s3:ObjectRestore:Completed" return "s3:ObjectRestore:Completed"
case ObjectTransitionAll:
return "s3:ObjectTransition:*"
case ObjectTransitionFailed:
return "s3:ObjectTransition:Failed"
case ObjectTransitionComplete:
return "s3:ObjectTransition:Complete"
} }
return "" return ""
@ -254,7 +268,12 @@ func ParseName(s string) (Name, error) {
return ObjectRestorePostInitiated, nil return ObjectRestorePostInitiated, nil
case "s3:ObjectRestore:Completed": case "s3:ObjectRestore:Completed":
return ObjectRestorePostCompleted, nil return ObjectRestorePostCompleted, nil
case "s3:ObjectTransition:Failed":
return ObjectTransitionFailed, nil
case "s3:ObjectTransition:Complete":
return ObjectTransitionComplete, nil
case "s3:ObjectTransition:*":
return ObjectTransitionAll, nil
default: default:
return 0, &ErrInvalidEventName{s} return 0, &ErrInvalidEventName{s}
} }