(ctx context.Context, putReq *objectstorage.PutObjectRequest)
| 400 | } |
| 401 | |
| 402 | func (o *Object) createMultipartUpload(ctx context.Context, putReq *objectstorage.PutObjectRequest) ( |
| 403 | uploadID string, existingParts map[int]objectstorage.MultipartUploadPartSummary, err error) { |
| 404 | bucketName, bucketPath := o.split() |
| 405 | err = o.fs.makeBucket(ctx, bucketName) |
| 406 | if err != nil { |
| 407 | fs.Errorf(o, "failed to create bucket: %v, err: %v", bucketName, err) |
| 408 | return uploadID, existingParts, err |
| 409 | } |
| 410 | if o.fs.opt.AttemptResumeUpload { |
| 411 | fs.Debugf(o, "attempting to resume upload for %v (if any)", o.remote) |
| 412 | resumeUploads, err := o.fs.findLatestMultipartUpload(ctx, bucketName, bucketPath) |
| 413 | if err == nil && len(resumeUploads) > 0 { |
| 414 | uploadID = *resumeUploads[0].UploadId |
| 415 | existingParts, err = o.fs.listMultipartUploadParts(ctx, bucketName, bucketPath, uploadID) |
| 416 | if err == nil { |
| 417 | fs.Debugf(o, "resuming with existing upload id: %v", uploadID) |
| 418 | return uploadID, existingParts, err |
| 419 | } |
| 420 | } |
| 421 | } |
| 422 | req := objectstorage.CreateMultipartUploadRequest{ |
| 423 | NamespaceName: common.String(o.fs.opt.Namespace), |
| 424 | BucketName: common.String(bucketName), |
| 425 | } |
| 426 | req.Object = common.String(bucketPath) |
| 427 | if o.fs.opt.StorageTier != "" { |
| 428 | storageTier, ok := objectstorage.GetMappingStorageTierEnum(o.fs.opt.StorageTier) |
| 429 | if !ok { |
| 430 | return "", nil, fmt.Errorf("not a valid storage tier: %v", o.fs.opt.StorageTier) |
| 431 | } |
| 432 | req.StorageTier = storageTier |
| 433 | } |
| 434 | o.applyMultipartUploadOptions(putReq, &req) |
| 435 | |
| 436 | var resp objectstorage.CreateMultipartUploadResponse |
| 437 | err = o.fs.pacer.Call(func() (bool, error) { |
| 438 | resp, err = o.fs.srv.CreateMultipartUpload(ctx, req) |
| 439 | return shouldRetry(ctx, resp.HTTPResponse(), err) |
| 440 | }) |
| 441 | if err != nil { |
| 442 | return "", existingParts, err |
| 443 | } |
| 444 | existingParts = make(map[int]objectstorage.MultipartUploadPartSummary) |
| 445 | uploadID = *resp.UploadId |
| 446 | fs.Debugf(o, "created new upload id: %v", uploadID) |
| 447 | return uploadID, existingParts, err |
| 448 | } |
no test coverage detected