allow lookup()/head() operations on Veeam SOS objects (#17331)

This commit is contained in:
Harshavardhana 2023-06-01 15:26:26 -07:00 committed by GitHub
parent f86b9abf32
commit 54e544e03e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 0 deletions

View File

@ -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)

View File

@ -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 {