mirror of
https://github.com/minio/minio.git
synced 2025-02-09 12:48:08 -05:00
Trace ILM errors (#20576)
Some paths would attempt transitions but in case of failures no traces would be emitted. Add traces (with errors) when transition operations fail.
This commit is contained in:
parent
51410c9023
commit
ed5ed7e490
@ -71,7 +71,7 @@ func NewLifecycleSys() *LifecycleSys {
|
|||||||
return &LifecycleSys{}
|
return &LifecycleSys{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func ilmTrace(startTime time.Time, duration time.Duration, oi ObjectInfo, event string, metadata map[string]string) madmin.TraceInfo {
|
func ilmTrace(startTime time.Time, duration time.Duration, oi ObjectInfo, event string, metadata map[string]string, err string) madmin.TraceInfo {
|
||||||
sz, _ := oi.GetActualSize()
|
sz, _ := oi.GetActualSize()
|
||||||
return madmin.TraceInfo{
|
return madmin.TraceInfo{
|
||||||
TraceType: madmin.TraceILM,
|
TraceType: madmin.TraceILM,
|
||||||
@ -81,18 +81,22 @@ func ilmTrace(startTime time.Time, duration time.Duration, oi ObjectInfo, event
|
|||||||
Duration: duration,
|
Duration: duration,
|
||||||
Path: pathJoin(oi.Bucket, oi.Name),
|
Path: pathJoin(oi.Bucket, oi.Name),
|
||||||
Bytes: sz,
|
Bytes: sz,
|
||||||
Error: "",
|
Error: err,
|
||||||
Message: getSource(4),
|
Message: getSource(4),
|
||||||
Custom: metadata,
|
Custom: metadata,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sys *LifecycleSys) trace(oi ObjectInfo) func(event string, metadata map[string]string) {
|
func (sys *LifecycleSys) trace(oi ObjectInfo) func(event string, metadata map[string]string, err error) {
|
||||||
startTime := time.Now()
|
startTime := time.Now()
|
||||||
return func(event string, metadata map[string]string) {
|
return func(event string, metadata map[string]string, err error) {
|
||||||
duration := time.Since(startTime)
|
duration := time.Since(startTime)
|
||||||
if globalTrace.NumSubscribers(madmin.TraceILM) > 0 {
|
if globalTrace.NumSubscribers(madmin.TraceILM) > 0 {
|
||||||
globalTrace.Publish(ilmTrace(startTime, duration, oi, event, metadata))
|
e := ""
|
||||||
|
if err != nil {
|
||||||
|
e = err.Error()
|
||||||
|
}
|
||||||
|
globalTrace.Publish(ilmTrace(startTime, duration, oi, event, metadata, e))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -362,6 +366,7 @@ func (es *expiryState) Worker(input <-chan expiryOp) {
|
|||||||
err := deleteObjectFromRemoteTier(es.ctx, oi.TransitionedObject.Name, oi.TransitionedObject.VersionID, oi.TransitionedObject.Tier)
|
err := deleteObjectFromRemoteTier(es.ctx, oi.TransitionedObject.Name, oi.TransitionedObject.VersionID, oi.TransitionedObject.Tier)
|
||||||
if ignoreNotFoundErr(err) != nil {
|
if ignoreNotFoundErr(err) != nil {
|
||||||
transitionLogIf(es.ctx, err)
|
transitionLogIf(es.ctx, err)
|
||||||
|
traceFn(ILMFreeVersionDelete, nil, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1325,10 +1325,13 @@ func applyExpiryOnNonTransitionedObjects(ctx context.Context, objLayer ObjectLay
|
|||||||
dobj, err = objLayer.DeleteObject(ctx, obj.Bucket, encodeDirObject(obj.Name), opts)
|
dobj, err = objLayer.DeleteObject(ctx, obj.Bucket, encodeDirObject(obj.Name), opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if isErrObjectNotFound(err) || isErrVersionNotFound(err) {
|
if isErrObjectNotFound(err) || isErrVersionNotFound(err) {
|
||||||
|
traceFn(ILMExpiry, nil, nil)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
// Assume it is still there.
|
// Assume it is still there.
|
||||||
ilmLogOnceIf(ctx, fmt.Errorf("DeleteObject(%s, %s): %w", obj.Bucket, obj.Name, err), "non-transition-expiry"+obj.Name)
|
err := fmt.Errorf("DeleteObject(%s, %s): %w", obj.Bucket, obj.Name, err)
|
||||||
|
ilmLogOnceIf(ctx, err, "non-transition-expiry"+obj.Name)
|
||||||
|
traceFn(ILMExpiry, nil, err)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if dobj.Name == "" {
|
if dobj.Name == "" {
|
||||||
@ -1549,7 +1552,7 @@ const (
|
|||||||
ILMTransition = " ilm:transition"
|
ILMTransition = " ilm:transition"
|
||||||
)
|
)
|
||||||
|
|
||||||
func auditLogLifecycle(ctx context.Context, oi ObjectInfo, event string, tags map[string]string, traceFn func(event string, metadata map[string]string)) {
|
func auditLogLifecycle(ctx context.Context, oi ObjectInfo, event string, tags map[string]string, traceFn func(event string, metadata map[string]string, err error)) {
|
||||||
var apiName string
|
var apiName string
|
||||||
switch event {
|
switch event {
|
||||||
case ILMExpiry:
|
case ILMExpiry:
|
||||||
@ -1567,5 +1570,5 @@ func auditLogLifecycle(ctx context.Context, oi ObjectInfo, event string, tags ma
|
|||||||
VersionID: oi.VersionID,
|
VersionID: oi.VersionID,
|
||||||
Tags: tags,
|
Tags: tags,
|
||||||
})
|
})
|
||||||
traceFn(event, tags)
|
traceFn(event, tags, nil)
|
||||||
}
|
}
|
||||||
|
@ -2365,6 +2365,7 @@ func (er erasureObjects) TransitionObject(ctx context.Context, bucket, object st
|
|||||||
|
|
||||||
destObj, err := genTransitionObjName(bucket)
|
destObj, err := genTransitionObjName(bucket)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
traceFn(ILMTransition, nil, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2378,6 +2379,7 @@ func (er erasureObjects) TransitionObject(ctx context.Context, bucket, object st
|
|||||||
rv, err = tgtClient.Put(ctx, destObj, pr, fi.Size)
|
rv, err = tgtClient.Put(ctx, destObj, pr, fi.Size)
|
||||||
pr.CloseWithError(err)
|
pr.CloseWithError(err)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
traceFn(ILMTransition, nil, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fi.TransitionStatus = lifecycle.TransitionComplete
|
fi.TransitionStatus = lifecycle.TransitionComplete
|
||||||
|
Loading…
x
Reference in New Issue
Block a user