mirror of
https://github.com/minio/minio.git
synced 2025-02-03 18:06:00 -05:00
fix: notify bucket replication after replication/ilm (#11343)
This commit is contained in:
parent
eb6871ecd9
commit
7e266293e6
@ -284,19 +284,17 @@ func deleteTransitionedObject(ctx context.Context, objectAPI ObjectLayer, bucket
|
|||||||
if isDeleteTierOnly {
|
if isDeleteTierOnly {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
_, err = objectAPI.DeleteObject(ctx, bucket, object, opts)
|
|
||||||
|
objInfo, err := objectAPI.DeleteObject(ctx, bucket, object, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
eventName := event.ObjectRemovedDelete
|
eventName := event.ObjectRemovedDelete
|
||||||
if lcOpts.DeleteMarker {
|
if lcOpts.DeleteMarker {
|
||||||
eventName = event.ObjectRemovedDeleteMarkerCreated
|
eventName = event.ObjectRemovedDeleteMarkerCreated
|
||||||
}
|
}
|
||||||
objInfo := ObjectInfo{
|
|
||||||
Name: object,
|
|
||||||
VersionID: lcOpts.VersionID,
|
|
||||||
DeleteMarker: lcOpts.DeleteMarker,
|
|
||||||
}
|
|
||||||
// Notify object deleted event.
|
// Notify object deleted event.
|
||||||
sendEvent(eventArgs{
|
sendEvent(eventArgs{
|
||||||
EventName: eventName,
|
EventName: eventName,
|
||||||
@ -358,18 +356,16 @@ func transitionObject(ctx context.Context, objectAPI ObjectLayer, objInfo Object
|
|||||||
opts.TransitionStatus = lifecycle.TransitionComplete
|
opts.TransitionStatus = lifecycle.TransitionComplete
|
||||||
eventName := event.ObjectTransitionComplete
|
eventName := event.ObjectTransitionComplete
|
||||||
|
|
||||||
_, err = objectAPI.DeleteObject(ctx, oi.Bucket, oi.Name, opts)
|
objInfo, err = objectAPI.DeleteObject(ctx, oi.Bucket, oi.Name, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
eventName = event.ObjectTransitionFailed
|
eventName = event.ObjectTransitionFailed
|
||||||
}
|
}
|
||||||
|
|
||||||
// Notify object deleted event.
|
// Notify object deleted event.
|
||||||
sendEvent(eventArgs{
|
sendEvent(eventArgs{
|
||||||
EventName: eventName,
|
EventName: eventName,
|
||||||
BucketName: oi.Bucket,
|
BucketName: objInfo.Bucket,
|
||||||
Object: ObjectInfo{
|
Object: objInfo,
|
||||||
Name: oi.Name,
|
|
||||||
VersionID: opts.VersionID,
|
|
||||||
},
|
|
||||||
Host: "Internal: [ILM-Transition]",
|
Host: "Internal: [ILM-Transition]",
|
||||||
})
|
})
|
||||||
return err
|
return err
|
||||||
|
@ -251,37 +251,31 @@ func replicateDelete(ctx context.Context, dobj DeletedObjectVersionInfo, objectA
|
|||||||
versionPurgeStatus = Complete
|
versionPurgeStatus = Complete
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var eventName = event.ObjectReplicationComplete
|
var eventName = event.ObjectReplicationComplete
|
||||||
if replicationStatus == string(replication.Failed) || versionPurgeStatus == Failed {
|
if replicationStatus == string(replication.Failed) || versionPurgeStatus == Failed {
|
||||||
eventName = event.ObjectReplicationFailed
|
eventName = event.ObjectReplicationFailed
|
||||||
}
|
}
|
||||||
objInfo := ObjectInfo{
|
|
||||||
Name: dobj.ObjectName,
|
|
||||||
DeleteMarker: dobj.DeleteMarker,
|
|
||||||
VersionID: versionID,
|
|
||||||
ReplicationStatus: replication.StatusType(dobj.DeleteMarkerReplicationStatus),
|
|
||||||
VersionPurgeStatus: versionPurgeStatus,
|
|
||||||
}
|
|
||||||
|
|
||||||
eventArg := &eventArgs{
|
|
||||||
BucketName: bucket,
|
|
||||||
Object: objInfo,
|
|
||||||
Host: "Internal: [Replication]",
|
|
||||||
EventName: eventName,
|
|
||||||
}
|
|
||||||
sendEvent(*eventArg)
|
|
||||||
|
|
||||||
// Update metadata on the delete marker or purge permanent delete if replication success.
|
// Update metadata on the delete marker or purge permanent delete if replication success.
|
||||||
if _, err = objectAPI.DeleteObject(ctx, bucket, dobj.ObjectName, ObjectOptions{
|
objInfo, err := objectAPI.DeleteObject(ctx, bucket, dobj.ObjectName, ObjectOptions{
|
||||||
VersionID: versionID,
|
VersionID: versionID,
|
||||||
DeleteMarker: dobj.DeleteMarker,
|
DeleteMarker: dobj.DeleteMarker,
|
||||||
DeleteMarkerReplicationStatus: replicationStatus,
|
DeleteMarkerReplicationStatus: replicationStatus,
|
||||||
Versioned: globalBucketVersioningSys.Enabled(bucket),
|
Versioned: globalBucketVersioningSys.Enabled(bucket),
|
||||||
VersionPurgeStatus: versionPurgeStatus,
|
VersionPurgeStatus: versionPurgeStatus,
|
||||||
VersionSuspended: globalBucketVersioningSys.Suspended(bucket),
|
VersionSuspended: globalBucketVersioningSys.Suspended(bucket),
|
||||||
}); err != nil {
|
})
|
||||||
|
if err != nil {
|
||||||
logger.LogIf(ctx, fmt.Errorf("Unable to update replication metadata for %s/%s %s: %w", bucket, dobj.ObjectName, dobj.VersionID, err))
|
logger.LogIf(ctx, fmt.Errorf("Unable to update replication metadata for %s/%s %s: %w", bucket, dobj.ObjectName, dobj.VersionID, err))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sendEvent(eventArgs{
|
||||||
|
BucketName: bucket,
|
||||||
|
Object: objInfo,
|
||||||
|
Host: "Internal: [Replication]",
|
||||||
|
EventName: eventName,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func getCopyObjMetadata(oi ObjectInfo, dest replication.Destination) map[string]string {
|
func getCopyObjMetadata(oi ObjectInfo, dest replication.Destination) map[string]string {
|
||||||
@ -511,6 +505,7 @@ func replicateObject(ctx context.Context, objInfo ObjectInfo, objectAPI ObjectLa
|
|||||||
}
|
}
|
||||||
r.Close()
|
r.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
objInfo.UserDefined[xhttp.AmzBucketReplicationStatus] = replicationStatus.String()
|
objInfo.UserDefined[xhttp.AmzBucketReplicationStatus] = replicationStatus.String()
|
||||||
if objInfo.UserTags != "" {
|
if objInfo.UserTags != "" {
|
||||||
objInfo.UserDefined[xhttp.AmzObjectTagging] = objInfo.UserTags
|
objInfo.UserDefined[xhttp.AmzObjectTagging] = objInfo.UserTags
|
||||||
@ -524,20 +519,23 @@ func replicateObject(ctx context.Context, objInfo ObjectInfo, objectAPI ObjectLa
|
|||||||
if replicationStatus == replication.Failed {
|
if replicationStatus == replication.Failed {
|
||||||
eventName = event.ObjectReplicationFailed
|
eventName = event.ObjectReplicationFailed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
objInfo.metadataOnly = true // Perform only metadata updates.
|
||||||
|
objInfo, err = objectAPI.CopyObject(ctx, bucket, object, bucket, object, objInfo, ObjectOptions{
|
||||||
|
VersionID: objInfo.VersionID,
|
||||||
|
}, ObjectOptions{
|
||||||
|
VersionID: objInfo.VersionID,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
logger.LogIf(ctx, fmt.Errorf("Unable to update replication metadata for %s: %s", objInfo.VersionID, err))
|
||||||
|
}
|
||||||
|
|
||||||
sendEvent(eventArgs{
|
sendEvent(eventArgs{
|
||||||
EventName: eventName,
|
EventName: eventName,
|
||||||
BucketName: bucket,
|
BucketName: bucket,
|
||||||
Object: objInfo,
|
Object: objInfo,
|
||||||
Host: "Internal: [Replication]",
|
Host: "Internal: [Replication]",
|
||||||
})
|
})
|
||||||
objInfo.metadataOnly = true // Perform only metadata updates.
|
|
||||||
if _, err = objectAPI.CopyObject(ctx, bucket, object, bucket, object, objInfo, ObjectOptions{
|
|
||||||
VersionID: objInfo.VersionID,
|
|
||||||
}, ObjectOptions{
|
|
||||||
VersionID: objInfo.VersionID,
|
|
||||||
}); err != nil {
|
|
||||||
logger.LogIf(ctx, fmt.Errorf("Unable to update replication metadata for %s: %s", objInfo.VersionID, err))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// filterReplicationStatusMetadata filters replication status metadata for COPY
|
// filterReplicationStatusMetadata filters replication status metadata for COPY
|
||||||
|
Loading…
x
Reference in New Issue
Block a user