in component/azstorage/block_blob.go [509:555]
func (bb *BlockBlob) getAttrUsingList(name string) (attr *internal.ObjAttr, err error) {
log.Trace("BlockBlob::getAttrUsingList : name %s", name)
iteration := 0
var marker, new_marker *string
var blobs []*internal.ObjAttr
blobsRead := 0
for marker != nil || iteration == 0 {
blobs, new_marker, err = bb.List(name, marker, bb.Config.maxResultsForList)
if err != nil {
e := storeBlobErrToErr(err)
if e == ErrFileNotFound {
return attr, syscall.ENOENT
} else if e == InvalidPermission {
log.Err("BlockBlob::getAttrUsingList : Insufficient permissions for %s [%s]", name, err.Error())
return attr, syscall.EACCES
} else {
log.Warn("BlockBlob::getAttrUsingList : Failed to list blob properties for %s [%s]", name, err.Error())
}
}
for i, blob := range blobs {
log.Trace("BlockBlob::getAttrUsingList : Item %d Blob %s", i+blobsRead, blob.Name)
if blob.Path == name {
return blob, nil
}
}
marker = new_marker
iteration++
blobsRead += len(blobs)
log.Trace("BlockBlob::getAttrUsingList : So far retrieved %d objects in %d iterations", blobsRead, iteration)
if new_marker == nil || *new_marker == "" {
break
}
}
if err == nil {
log.Warn("BlockBlob::getAttrUsingList : blob %s does not exist", name)
return nil, syscall.ENOENT
}
log.Err("BlockBlob::getAttrUsingList : Failed to list blob properties for %s [%s]", name, err.Error())
return nil, err
}