Skip to content

Commit

Permalink
Update minio.Core API
Browse files Browse the repository at this point in the history
These breaking changes are added:

- Add custom headers and trailers parameters for PutObjectPart and
update input parameters to a struct

- Expose upload info in CompleteMultipartUpload
  • Loading branch information
donatello committed Feb 6, 2023
1 parent f5f1604 commit a4305c7
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 16 deletions.
37 changes: 25 additions & 12 deletions core.go
Expand Up @@ -86,19 +86,32 @@ func (c Core) ListMultipartUploads(ctx context.Context, bucket, prefix, keyMarke
return c.listMultipartUploadsQuery(ctx, bucket, keyMarker, uploadIDMarker, prefix, delimiter, maxUploads)
}

// PartUploadReq contains inputs for PutObjectPart
type PartUploadReq struct {
Bucket, Object, UploadID string
PartID int
Data io.Reader
Size int64
Md5Base64, Sha256Hex string
SSE encrypt.ServerSide
CustomHeader, Trailer http.Header
}

// PutObjectPart - Upload an object part.
func (c Core) PutObjectPart(ctx context.Context, bucket, object, uploadID string, partID int, data io.Reader, size int64, md5Base64, sha256Hex string, sse encrypt.ServerSide) (ObjectPart, error) {
func (c Core) PutObjectPart(ctx context.Context, r PartUploadReq) (ObjectPart, error) {
p := uploadPartParams{
bucketName: bucket,
objectName: object,
uploadID: uploadID,
reader: data,
partNumber: partID,
md5Base64: md5Base64,
sha256Hex: sha256Hex,
size: size,
sse: sse,
bucketName: r.Bucket,
objectName: r.Object,
uploadID: r.UploadID,
reader: r.Data,
partNumber: r.PartID,
md5Base64: r.Md5Base64,
sha256Hex: r.Sha256Hex,
size: r.Size,
sse: r.SSE,
streamSha256: true,
customHeader: r.CustomHeader,
trailer: r.Trailer,
}
return c.uploadPart(ctx, p)
}
Expand All @@ -109,11 +122,11 @@ func (c Core) ListObjectParts(ctx context.Context, bucket, object, uploadID stri
}

// CompleteMultipartUpload - Concatenate uploaded parts and commit to an object.
func (c Core) CompleteMultipartUpload(ctx context.Context, bucket, object, uploadID string, parts []CompletePart, opts PutObjectOptions) (string, error) {
func (c Core) CompleteMultipartUpload(ctx context.Context, bucket, object, uploadID string, parts []CompletePart, opts PutObjectOptions) (UploadInfo, error) {
res, err := c.completeMultipartUpload(ctx, bucket, object, uploadID, completeMultipartUpload{
Parts: parts,
}, opts)
return res.ETag, err
return res, err
}

// AbortMultipartUpload - Abort an incomplete upload.
Expand Down
16 changes: 15 additions & 1 deletion core_test.go
Expand Up @@ -875,7 +875,21 @@ func TestCoreMultipartUpload(t *testing.T) {
partID++
data := bytes.NewReader(partBuf[:n])
dataLen := int64(len(partBuf[:n]))
objectPart, err := core.PutObjectPart(context.Background(), bucketName, objectName, uploadID, partID, data, dataLen, "", "", encrypt.NewSSE())
objectPart, err := core.PutObjectPart(context.Background(),
PartUploadReq{
Bucket: bucketName,
Object: objectName,
UploadID: uploadID,
PartID: partID,
Data: data,
Size: dataLen,
Md5Base64: "",
Sha256Hex: "",
SSE: encrypt.NewSSE(),
CustomHeader: nil,
Trailer: nil,
},
)
if err != nil {
t.Fatal("Error:", err, bucketName, objectName)
}
Expand Down
34 changes: 31 additions & 3 deletions functional_tests.go
Expand Up @@ -2053,7 +2053,7 @@ func testPutObjectWithChecksums() {
}

// Enable tracing, write to stderr.
//c.TraceOn(os.Stderr)
// c.TraceOn(os.Stderr)

// Set user agent.
c.SetAppInfo("MinIO-go-FunctionalTest", "0.1.0")
Expand Down Expand Up @@ -8414,14 +8414,42 @@ func testSSECMultipartEncryptedToSSECCopyObjectPart() {

var completeParts []minio.CompletePart

part, err := c.PutObjectPart(context.Background(), bucketName, objectName, uploadID, 1, bytes.NewReader(buf[:5*1024*1024]), 5*1024*1024, "", "", srcencryption)
part, err := c.PutObjectPart(context.Background(),
PartUploadReq{
Bucket: bucketName,
Object: objectName,
UploadID: uploadID,
PartID: 1,
Data: bytes.NewReader(buf[:5*1024*1024]),
Size: 5 * 1024 * 1024,
Md5Base64: "",
Sha256Hex: "",
SSE: srcencryption,
CustomHeader: nil,
Trailer: nil,
},
)
if err != nil {
logError(testName, function, args, startTime, "", "PutObjectPart call failed", err)
return
}
completeParts = append(completeParts, minio.CompletePart{PartNumber: part.PartNumber, ETag: part.ETag})

part, err = c.PutObjectPart(context.Background(), bucketName, objectName, uploadID, 2, bytes.NewReader(buf[5*1024*1024:]), 1024*1024, "", "", srcencryption)
part, err = c.PutObjectPart(context.Background(),
PartUploadReq{
Bucket: bucketName,
Object: objectName,
UploadID: uploadID,
PartID: 2,
Data: bytes.NewReader(buf[5*1024*1024:]),
Size: 1024 * 1024,
Md5Base64: "",
Sha256Hex: "",
SSE: srcencryption,
CustomHeader: nil,
Trailer: nil,
},
)
if err != nil {
logError(testName, function, args, startTime, "", "PutObjectPart call failed", err)
return
Expand Down

0 comments on commit a4305c7

Please sign in to comment.