MCPcopy
hub / github.com/rclone/rclone / createMultipartUpload

Method createMultipartUpload

backend/oracleobjectstorage/multipart.go:402–448  ·  view source on GitHub ↗
(ctx context.Context, putReq *objectstorage.PutObjectRequest)

Source from the content-addressed store, hash-verified

400}
401
402func (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}

Callers 1

OpenChunkWriterMethod · 0.95

Calls 11

splitMethod · 0.95
ErrorfFunction · 0.92
DebugfFunction · 0.92
shouldRetryFunction · 0.70
StringMethod · 0.65
makeBucketMethod · 0.45
ErrorfMethod · 0.45
CallMethod · 0.45

Tested by

no test coverage detected