diff --git a/cmd/erasure-object.go b/cmd/erasure-object.go index 78925a367..0f4b5b305 100644 --- a/cmd/erasure-object.go +++ b/cmd/erasure-object.go @@ -442,6 +442,14 @@ func (er erasureObjects) getObjectWithFileInfo(ctx context.Context, bucket, obje func (er erasureObjects) GetObjectInfo(ctx context.Context, bucket, object string, opts ObjectOptions) (info ObjectInfo, err error) { auditObjectErasureSet(ctx, object, &er) + // This is a special call attempted first to check for SOS-API calls. + info, err = veeamSOSAPIHeadObject(ctx, bucket, object, opts) + if err == nil { + return info, nil + } + // reset any error to 'nil' + err = nil + if !opts.NoLock { // Lock the object before reading. lk := er.NewNSLock(bucket, object) diff --git a/cmd/veeam-sos-api.go b/cmd/veeam-sos-api.go index 47d99d841..c3edee512 100644 --- a/cmd/veeam-sos-api.go +++ b/cmd/veeam-sos-api.go @@ -115,6 +115,15 @@ const ( capacityXMLObject = ".system-d26a9498-cb7c-4a87-a44a-8ae204f5ba6c/capacity.xml" ) +func veeamSOSAPIHeadObject(ctx context.Context, bucket, object string, opts ObjectOptions) (ObjectInfo, error) { + gr, err := veeamSOSAPIGetObject(ctx, bucket, object, nil, opts) + if gr != nil { + gr.Close() + return gr.ObjInfo, nil + } + return ObjectInfo{}, err +} + func veeamSOSAPIGetObject(ctx context.Context, bucket, object string, rs *HTTPRangeSpec, opts ObjectOptions) (gr *GetObjectReader, err error) { var buf []byte switch object {