mirror of
https://github.com/minio/minio.git
synced 2025-04-21 19:14:39 -04:00
Rename structs for azure and s3 gateway to be consistent. (#4347)
This commit is contained in:
parent
155a90403a
commit
87fb911d38
@ -30,7 +30,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// AnonGetBucketInfo - Get bucket metadata from azure anonymously.
|
// AnonGetBucketInfo - Get bucket metadata from azure anonymously.
|
||||||
func (a AzureObjects) AnonGetBucketInfo(bucket string) (bucketInfo BucketInfo, err error) {
|
func (a *azureObjects) AnonGetBucketInfo(bucket string) (bucketInfo BucketInfo, err error) {
|
||||||
url, err := url.Parse(a.client.GetBlobURL(bucket, ""))
|
url, err := url.Parse(a.client.GetBlobURL(bucket, ""))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return bucketInfo, azureToObjectError(traceError(err))
|
return bucketInfo, azureToObjectError(traceError(err))
|
||||||
@ -40,7 +40,7 @@ func (a AzureObjects) AnonGetBucketInfo(bucket string) (bucketInfo BucketInfo, e
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return bucketInfo, azureToObjectError(traceError(err), bucket)
|
return bucketInfo, azureToObjectError(traceError(err), bucket)
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
resp.Body.Close()
|
||||||
|
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
return bucketInfo, azureToObjectError(traceError(anonErrToObjectErr(resp.StatusCode, bucket)), bucket)
|
return bucketInfo, azureToObjectError(traceError(anonErrToObjectErr(resp.StatusCode, bucket)), bucket)
|
||||||
@ -59,14 +59,14 @@ func (a AzureObjects) AnonGetBucketInfo(bucket string) (bucketInfo BucketInfo, e
|
|||||||
|
|
||||||
// AnonPutObject - SendPUT request without authentication.
|
// AnonPutObject - SendPUT request without authentication.
|
||||||
// This is needed when clients send PUT requests on objects that can be uploaded without auth.
|
// This is needed when clients send PUT requests on objects that can be uploaded without auth.
|
||||||
func (a AzureObjects) AnonPutObject(bucket, object string, size int64, data io.Reader, metadata map[string]string, sha256sum string) (objInfo ObjectInfo, err error) {
|
func (a *azureObjects) AnonPutObject(bucket, object string, size int64, data io.Reader, metadata map[string]string, sha256sum string) (objInfo ObjectInfo, err error) {
|
||||||
// azure doesn't support anonymous put
|
// azure doesn't support anonymous put
|
||||||
return ObjectInfo{}, traceError(NotImplemented{})
|
return ObjectInfo{}, traceError(NotImplemented{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// AnonGetObject - SendGET request without authentication.
|
// AnonGetObject - SendGET request without authentication.
|
||||||
// This is needed when clients send GET requests on objects that can be downloaded without auth.
|
// This is needed when clients send GET requests on objects that can be downloaded without auth.
|
||||||
func (a AzureObjects) AnonGetObject(bucket, object string, startOffset int64, length int64, writer io.Writer) (err error) {
|
func (a *azureObjects) AnonGetObject(bucket, object string, startOffset int64, length int64, writer io.Writer) (err error) {
|
||||||
u := a.client.GetBlobURL(bucket, object)
|
u := a.client.GetBlobURL(bucket, object)
|
||||||
req, err := http.NewRequest("GET", u, nil)
|
req, err := http.NewRequest("GET", u, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -95,12 +95,12 @@ func (a AzureObjects) AnonGetObject(bucket, object string, startOffset int64, le
|
|||||||
|
|
||||||
// AnonGetObjectInfo - Send HEAD request without authentication and convert the
|
// AnonGetObjectInfo - Send HEAD request without authentication and convert the
|
||||||
// result to ObjectInfo.
|
// result to ObjectInfo.
|
||||||
func (a AzureObjects) AnonGetObjectInfo(bucket, object string) (objInfo ObjectInfo, err error) {
|
func (a *azureObjects) AnonGetObjectInfo(bucket, object string) (objInfo ObjectInfo, err error) {
|
||||||
resp, err := http.Head(a.client.GetBlobURL(bucket, object))
|
resp, err := http.Head(a.client.GetBlobURL(bucket, object))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return objInfo, azureToObjectError(traceError(err), bucket, object)
|
return objInfo, azureToObjectError(traceError(err), bucket, object)
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
resp.Body.Close()
|
||||||
|
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
return objInfo, azureToObjectError(traceError(anonErrToObjectErr(resp.StatusCode, bucket, object)), bucket, object)
|
return objInfo, azureToObjectError(traceError(anonErrToObjectErr(resp.StatusCode, bucket, object)), bucket, object)
|
||||||
@ -135,7 +135,7 @@ func (a AzureObjects) AnonGetObjectInfo(bucket, object string) (objInfo ObjectIn
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AnonListObjects - Use Azure equivalent ListBlobs.
|
// AnonListObjects - Use Azure equivalent ListBlobs.
|
||||||
func (a AzureObjects) AnonListObjects(bucket, prefix, marker, delimiter string, maxKeys int) (result ListObjectsInfo, err error) {
|
func (a *azureObjects) AnonListObjects(bucket, prefix, marker, delimiter string, maxKeys int) (result ListObjectsInfo, err error) {
|
||||||
params := storage.ListBlobsParameters{
|
params := storage.ListBlobsParameters{
|
||||||
Prefix: prefix,
|
Prefix: prefix,
|
||||||
Marker: marker,
|
Marker: marker,
|
||||||
|
@ -17,27 +17,27 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
// HealBucket - Not relevant.
|
// HealBucket - Not relevant.
|
||||||
func (a AzureObjects) HealBucket(bucket string) error {
|
func (a *azureObjects) HealBucket(bucket string) error {
|
||||||
return traceError(NotImplemented{})
|
return traceError(NotImplemented{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListBucketsHeal - Not relevant.
|
// ListBucketsHeal - Not relevant.
|
||||||
func (a AzureObjects) ListBucketsHeal() (buckets []BucketInfo, err error) {
|
func (a *azureObjects) ListBucketsHeal() (buckets []BucketInfo, err error) {
|
||||||
return nil, traceError(NotImplemented{})
|
return nil, traceError(NotImplemented{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// HealObject - Not relevant.
|
// HealObject - Not relevant.
|
||||||
func (a AzureObjects) HealObject(bucket, object string) (int, int, error) {
|
func (a *azureObjects) HealObject(bucket, object string) (int, int, error) {
|
||||||
return 0, 0, traceError(NotImplemented{})
|
return 0, 0, traceError(NotImplemented{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListObjectsHeal - Not relevant.
|
// ListObjectsHeal - Not relevant.
|
||||||
func (a AzureObjects) ListObjectsHeal(bucket, prefix, marker, delimiter string, maxKeys int) (ListObjectsInfo, error) {
|
func (a *azureObjects) ListObjectsHeal(bucket, prefix, marker, delimiter string, maxKeys int) (ListObjectsInfo, error) {
|
||||||
return ListObjectsInfo{}, traceError(NotImplemented{})
|
return ListObjectsInfo{}, traceError(NotImplemented{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListUploadsHeal - Not relevant.
|
// ListUploadsHeal - Not relevant.
|
||||||
func (a AzureObjects) ListUploadsHeal(bucket, prefix, marker, uploadIDMarker,
|
func (a *azureObjects) ListUploadsHeal(bucket, prefix, marker, uploadIDMarker,
|
||||||
delimiter string, maxUploads int) (ListMultipartsInfo, error) {
|
delimiter string, maxUploads int) (ListMultipartsInfo, error) {
|
||||||
return ListMultipartsInfo{}, traceError(NotImplemented{})
|
return ListMultipartsInfo{}, traceError(NotImplemented{})
|
||||||
}
|
}
|
||||||
|
@ -64,8 +64,8 @@ func (a *azureMultipartMetaInfo) del(key string) {
|
|||||||
delete(a.meta, key)
|
delete(a.meta, key)
|
||||||
}
|
}
|
||||||
|
|
||||||
// AzureObjects - Implements Object layer for Azure blob storage.
|
// azureObjects - Implements Object layer for Azure blob storage.
|
||||||
type AzureObjects struct {
|
type azureObjects struct {
|
||||||
client storage.BlobStorageClient // Azure sdk client
|
client storage.BlobStorageClient // Azure sdk client
|
||||||
metaInfo azureMultipartMetaInfo
|
metaInfo azureMultipartMetaInfo
|
||||||
}
|
}
|
||||||
@ -122,16 +122,16 @@ func azureToObjectError(err error, params ...string) error {
|
|||||||
return e
|
return e
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inits azure blob storage client and returns AzureObjects.
|
// Inits azure blob storage client and returns azureObjects.
|
||||||
func newAzureLayer(endPoint string, account, key string, secure bool) (GatewayLayer, error) {
|
func newAzureLayer(endPoint string, account, key string, secure bool) (GatewayLayer, error) {
|
||||||
if endPoint == "" {
|
if endPoint == "" {
|
||||||
endPoint = storage.DefaultBaseURL
|
endPoint = storage.DefaultBaseURL
|
||||||
}
|
}
|
||||||
c, err := storage.NewClient(account, key, endPoint, globalAzureAPIVersion, secure)
|
c, err := storage.NewClient(account, key, endPoint, globalAzureAPIVersion, secure)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return AzureObjects{}, err
|
return &azureObjects{}, err
|
||||||
}
|
}
|
||||||
return &AzureObjects{
|
return &azureObjects{
|
||||||
client: c.GetBlobService(),
|
client: c.GetBlobService(),
|
||||||
metaInfo: azureMultipartMetaInfo{
|
metaInfo: azureMultipartMetaInfo{
|
||||||
meta: make(map[string]map[string]string),
|
meta: make(map[string]map[string]string),
|
||||||
@ -142,30 +142,30 @@ func newAzureLayer(endPoint string, account, key string, secure bool) (GatewayLa
|
|||||||
|
|
||||||
// Shutdown - save any gateway metadata to disk
|
// Shutdown - save any gateway metadata to disk
|
||||||
// if necessary and reload upon next restart.
|
// if necessary and reload upon next restart.
|
||||||
func (a AzureObjects) Shutdown() error {
|
func (a *azureObjects) Shutdown() error {
|
||||||
// TODO
|
// TODO
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// StorageInfo - Not relevant to Azure backend.
|
// StorageInfo - Not relevant to Azure backend.
|
||||||
func (a AzureObjects) StorageInfo() StorageInfo {
|
func (a *azureObjects) StorageInfo() StorageInfo {
|
||||||
return StorageInfo{}
|
return StorageInfo{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MakeBucket - Create a new container on azure backend.
|
// MakeBucket - Create a new container on azure backend.
|
||||||
func (a AzureObjects) MakeBucket(bucket string) error {
|
func (a *azureObjects) MakeBucket(bucket string) error {
|
||||||
// will never be called, only satisfy ObjectLayer interface
|
// will never be called, only satisfy ObjectLayer interface
|
||||||
return traceError(NotImplemented{})
|
return traceError(NotImplemented{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// MakeBucketWithLocation - Create a new container on azure backend.
|
// MakeBucketWithLocation - Create a new container on azure backend.
|
||||||
func (a AzureObjects) MakeBucketWithLocation(bucket, location string) error {
|
func (a *azureObjects) MakeBucketWithLocation(bucket, location string) error {
|
||||||
err := a.client.CreateContainer(bucket, storage.ContainerAccessTypePrivate)
|
err := a.client.CreateContainer(bucket, storage.ContainerAccessTypePrivate)
|
||||||
return azureToObjectError(traceError(err), bucket)
|
return azureToObjectError(traceError(err), bucket)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetBucketInfo - Get bucket metadata..
|
// GetBucketInfo - Get bucket metadata..
|
||||||
func (a AzureObjects) GetBucketInfo(bucket string) (BucketInfo, error) {
|
func (a *azureObjects) GetBucketInfo(bucket string) (BucketInfo, error) {
|
||||||
// Azure does not have an equivalent call, hence use ListContainers.
|
// Azure does not have an equivalent call, hence use ListContainers.
|
||||||
resp, err := a.client.ListContainers(storage.ListContainersParameters{
|
resp, err := a.client.ListContainers(storage.ListContainersParameters{
|
||||||
Prefix: bucket,
|
Prefix: bucket,
|
||||||
@ -188,7 +188,7 @@ func (a AzureObjects) GetBucketInfo(bucket string) (BucketInfo, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ListBuckets - Lists all azure containers, uses Azure equivalent ListContainers.
|
// ListBuckets - Lists all azure containers, uses Azure equivalent ListContainers.
|
||||||
func (a AzureObjects) ListBuckets() (buckets []BucketInfo, err error) {
|
func (a *azureObjects) ListBuckets() (buckets []BucketInfo, err error) {
|
||||||
resp, err := a.client.ListContainers(storage.ListContainersParameters{})
|
resp, err := a.client.ListContainers(storage.ListContainersParameters{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, azureToObjectError(traceError(err))
|
return nil, azureToObjectError(traceError(err))
|
||||||
@ -207,13 +207,13 @@ func (a AzureObjects) ListBuckets() (buckets []BucketInfo, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DeleteBucket - delete a container on azure, uses Azure equivalent DeleteContainer.
|
// DeleteBucket - delete a container on azure, uses Azure equivalent DeleteContainer.
|
||||||
func (a AzureObjects) DeleteBucket(bucket string) error {
|
func (a *azureObjects) DeleteBucket(bucket string) error {
|
||||||
return azureToObjectError(traceError(a.client.DeleteContainer(bucket)), bucket)
|
return azureToObjectError(traceError(a.client.DeleteContainer(bucket)), bucket)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListObjects - lists all blobs on azure with in a container filtered by prefix
|
// ListObjects - lists all blobs on azure with in a container filtered by prefix
|
||||||
// and marker, uses Azure equivalent ListBlobs.
|
// and marker, uses Azure equivalent ListBlobs.
|
||||||
func (a AzureObjects) ListObjects(bucket, prefix, marker, delimiter string, maxKeys int) (result ListObjectsInfo, err error) {
|
func (a *azureObjects) ListObjects(bucket, prefix, marker, delimiter string, maxKeys int) (result ListObjectsInfo, err error) {
|
||||||
resp, err := a.client.ListBlobs(bucket, storage.ListBlobsParameters{
|
resp, err := a.client.ListBlobs(bucket, storage.ListBlobsParameters{
|
||||||
Prefix: prefix,
|
Prefix: prefix,
|
||||||
Marker: marker,
|
Marker: marker,
|
||||||
@ -250,7 +250,7 @@ func (a AzureObjects) ListObjects(bucket, prefix, marker, delimiter string, maxK
|
|||||||
//
|
//
|
||||||
// startOffset indicates the starting read location of the object.
|
// startOffset indicates the starting read location of the object.
|
||||||
// length indicates the total length of the object.
|
// length indicates the total length of the object.
|
||||||
func (a AzureObjects) GetObject(bucket, object string, startOffset int64, length int64, writer io.Writer) error {
|
func (a *azureObjects) GetObject(bucket, object string, startOffset int64, length int64, writer io.Writer) error {
|
||||||
byteRange := fmt.Sprintf("%d-", startOffset)
|
byteRange := fmt.Sprintf("%d-", startOffset)
|
||||||
if length > 0 && startOffset > 0 {
|
if length > 0 && startOffset > 0 {
|
||||||
byteRange = fmt.Sprintf("%d-%d", startOffset, startOffset+length-1)
|
byteRange = fmt.Sprintf("%d-%d", startOffset, startOffset+length-1)
|
||||||
@ -273,7 +273,7 @@ func (a AzureObjects) GetObject(bucket, object string, startOffset int64, length
|
|||||||
|
|
||||||
// GetObjectInfo - reads blob metadata properties and replies back ObjectInfo,
|
// GetObjectInfo - reads blob metadata properties and replies back ObjectInfo,
|
||||||
// uses zure equivalent GetBlobProperties.
|
// uses zure equivalent GetBlobProperties.
|
||||||
func (a AzureObjects) GetObjectInfo(bucket, object string) (objInfo ObjectInfo, err error) {
|
func (a *azureObjects) GetObjectInfo(bucket, object string) (objInfo ObjectInfo, err error) {
|
||||||
prop, err := a.client.GetBlobProperties(bucket, object)
|
prop, err := a.client.GetBlobProperties(bucket, object)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return objInfo, azureToObjectError(traceError(err), bucket, object)
|
return objInfo, azureToObjectError(traceError(err), bucket, object)
|
||||||
@ -311,7 +311,7 @@ func canonicalMetadata(metadata map[string]string) (canonical map[string]string)
|
|||||||
|
|
||||||
// PutObject - Create a new blob with the incoming data,
|
// PutObject - Create a new blob with the incoming data,
|
||||||
// uses Azure equivalent CreateBlockBlobFromReader.
|
// uses Azure equivalent CreateBlockBlobFromReader.
|
||||||
func (a AzureObjects) PutObject(bucket, object string, size int64, data io.Reader, metadata map[string]string, sha256sum string) (objInfo ObjectInfo, err error) {
|
func (a *azureObjects) PutObject(bucket, object string, size int64, data io.Reader, metadata map[string]string, sha256sum string) (objInfo ObjectInfo, err error) {
|
||||||
var sha256Writer hash.Hash
|
var sha256Writer hash.Hash
|
||||||
teeReader := data
|
teeReader := data
|
||||||
if sha256sum != "" {
|
if sha256sum != "" {
|
||||||
@ -339,7 +339,7 @@ func (a AzureObjects) PutObject(bucket, object string, size int64, data io.Reade
|
|||||||
|
|
||||||
// CopyObject - Copies a blob from source container to destination container.
|
// CopyObject - Copies a blob from source container to destination container.
|
||||||
// Uses Azure equivalent CopyBlob API.
|
// Uses Azure equivalent CopyBlob API.
|
||||||
func (a AzureObjects) CopyObject(srcBucket, srcObject, destBucket, destObject string, metadata map[string]string) (objInfo ObjectInfo, err error) {
|
func (a *azureObjects) CopyObject(srcBucket, srcObject, destBucket, destObject string, metadata map[string]string) (objInfo ObjectInfo, err error) {
|
||||||
err = a.client.CopyBlob(destBucket, destObject, a.client.GetBlobURL(srcBucket, srcObject))
|
err = a.client.CopyBlob(destBucket, destObject, a.client.GetBlobURL(srcBucket, srcObject))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return objInfo, azureToObjectError(traceError(err), srcBucket, srcObject)
|
return objInfo, azureToObjectError(traceError(err), srcBucket, srcObject)
|
||||||
@ -349,7 +349,7 @@ func (a AzureObjects) CopyObject(srcBucket, srcObject, destBucket, destObject st
|
|||||||
|
|
||||||
// DeleteObject - Deletes a blob on azure container, uses Azure
|
// DeleteObject - Deletes a blob on azure container, uses Azure
|
||||||
// equivalent DeleteBlob API.
|
// equivalent DeleteBlob API.
|
||||||
func (a AzureObjects) DeleteObject(bucket, object string) error {
|
func (a *azureObjects) DeleteObject(bucket, object string) error {
|
||||||
err := a.client.DeleteBlob(bucket, object, nil)
|
err := a.client.DeleteBlob(bucket, object, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return azureToObjectError(traceError(err), bucket, object)
|
return azureToObjectError(traceError(err), bucket, object)
|
||||||
@ -361,7 +361,7 @@ func (a AzureObjects) DeleteObject(bucket, object string) error {
|
|||||||
// FIXME: Full ListMultipartUploads is not supported yet. It is supported just enough to help our client libs to
|
// FIXME: Full ListMultipartUploads is not supported yet. It is supported just enough to help our client libs to
|
||||||
// support re-uploads. a.client.ListBlobs() can be made to return entries which include uncommitted blobs using
|
// support re-uploads. a.client.ListBlobs() can be made to return entries which include uncommitted blobs using
|
||||||
// which we need to filter out the committed blobs to get the list of uncommitted blobs.
|
// which we need to filter out the committed blobs to get the list of uncommitted blobs.
|
||||||
func (a AzureObjects) ListMultipartUploads(bucket, prefix, keyMarker, uploadIDMarker, delimiter string, maxUploads int) (result ListMultipartsInfo, err error) {
|
func (a *azureObjects) ListMultipartUploads(bucket, prefix, keyMarker, uploadIDMarker, delimiter string, maxUploads int) (result ListMultipartsInfo, err error) {
|
||||||
result.MaxUploads = maxUploads
|
result.MaxUploads = maxUploads
|
||||||
result.Prefix = prefix
|
result.Prefix = prefix
|
||||||
result.Delimiter = delimiter
|
result.Delimiter = delimiter
|
||||||
@ -377,7 +377,7 @@ func (a AzureObjects) ListMultipartUploads(bucket, prefix, keyMarker, uploadIDMa
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewMultipartUpload - Use Azure equivalent CreateBlockBlob.
|
// NewMultipartUpload - Use Azure equivalent CreateBlockBlob.
|
||||||
func (a AzureObjects) NewMultipartUpload(bucket, object string, metadata map[string]string) (uploadID string, err error) {
|
func (a *azureObjects) NewMultipartUpload(bucket, object string, metadata map[string]string) (uploadID string, err error) {
|
||||||
// Azure doesn't return a unique upload ID and we use object name in place of it. Azure allows multiple uploads to
|
// Azure doesn't return a unique upload ID and we use object name in place of it. Azure allows multiple uploads to
|
||||||
// co-exist as long as the user keeps the blocks uploaded (in block blobs) unique amongst concurrent upload attempts.
|
// co-exist as long as the user keeps the blocks uploaded (in block blobs) unique amongst concurrent upload attempts.
|
||||||
// Each concurrent client, keeps its own blockID list which it can commit.
|
// Each concurrent client, keeps its own blockID list which it can commit.
|
||||||
@ -393,7 +393,7 @@ func (a AzureObjects) NewMultipartUpload(bucket, object string, metadata map[str
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CopyObjectPart - Not implemented.
|
// CopyObjectPart - Not implemented.
|
||||||
func (a AzureObjects) CopyObjectPart(srcBucket, srcObject, destBucket, destObject string, uploadID string, partID int, startOffset int64, length int64) (info PartInfo, err error) {
|
func (a *azureObjects) CopyObjectPart(srcBucket, srcObject, destBucket, destObject string, uploadID string, partID int, startOffset int64, length int64) (info PartInfo, err error) {
|
||||||
return info, traceError(NotImplemented{})
|
return info, traceError(NotImplemented{})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -421,7 +421,7 @@ func azureParseBlockID(blockID string) (int, string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PutObjectPart - Use Azure equivalent PutBlockWithLength.
|
// PutObjectPart - Use Azure equivalent PutBlockWithLength.
|
||||||
func (a AzureObjects) PutObjectPart(bucket, object, uploadID string, partID int, size int64, data io.Reader, md5Hex string, sha256sum string) (info PartInfo, err error) {
|
func (a *azureObjects) PutObjectPart(bucket, object, uploadID string, partID int, size int64, data io.Reader, md5Hex string, sha256sum string) (info PartInfo, err error) {
|
||||||
if meta := a.metaInfo.get(uploadID); meta == nil {
|
if meta := a.metaInfo.get(uploadID); meta == nil {
|
||||||
return info, traceError(InvalidUploadID{})
|
return info, traceError(InvalidUploadID{})
|
||||||
}
|
}
|
||||||
@ -453,7 +453,7 @@ func (a AzureObjects) PutObjectPart(bucket, object, uploadID string, partID int,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ListObjectParts - Use Azure equivalent GetBlockList.
|
// ListObjectParts - Use Azure equivalent GetBlockList.
|
||||||
func (a AzureObjects) ListObjectParts(bucket, object, uploadID string, partNumberMarker int, maxParts int) (result ListPartsInfo, err error) {
|
func (a *azureObjects) ListObjectParts(bucket, object, uploadID string, partNumberMarker int, maxParts int) (result ListPartsInfo, err error) {
|
||||||
result.Bucket = bucket
|
result.Bucket = bucket
|
||||||
result.Object = object
|
result.Object = object
|
||||||
result.UploadID = uploadID
|
result.UploadID = uploadID
|
||||||
@ -502,13 +502,13 @@ func (a AzureObjects) ListObjectParts(bucket, object, uploadID string, partNumbe
|
|||||||
// AbortMultipartUpload - Not Implemented.
|
// AbortMultipartUpload - Not Implemented.
|
||||||
// There is no corresponding API in azure to abort an incomplete upload. The uncommmitted blocks
|
// There is no corresponding API in azure to abort an incomplete upload. The uncommmitted blocks
|
||||||
// gets deleted after one week.
|
// gets deleted after one week.
|
||||||
func (a AzureObjects) AbortMultipartUpload(bucket, object, uploadID string) error {
|
func (a *azureObjects) AbortMultipartUpload(bucket, object, uploadID string) error {
|
||||||
a.metaInfo.del(uploadID)
|
a.metaInfo.del(uploadID)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// CompleteMultipartUpload - Use Azure equivalent PutBlockList.
|
// CompleteMultipartUpload - Use Azure equivalent PutBlockList.
|
||||||
func (a AzureObjects) CompleteMultipartUpload(bucket, object, uploadID string, uploadedParts []completePart) (objInfo ObjectInfo, err error) {
|
func (a *azureObjects) CompleteMultipartUpload(bucket, object, uploadID string, uploadedParts []completePart) (objInfo ObjectInfo, err error) {
|
||||||
meta := a.metaInfo.get(uploadID)
|
meta := a.metaInfo.get(uploadID)
|
||||||
if meta == nil {
|
if meta == nil {
|
||||||
return objInfo, traceError(InvalidUploadID{uploadID})
|
return objInfo, traceError(InvalidUploadID{uploadID})
|
||||||
@ -598,7 +598,7 @@ func azureListBlobsGetParameters(p storage.ListBlobsParameters) url.Values {
|
|||||||
// storage.ContainerAccessTypePrivate - none in minio terminology
|
// storage.ContainerAccessTypePrivate - none in minio terminology
|
||||||
// As the common denominator for minio and azure is readonly and none, we support
|
// As the common denominator for minio and azure is readonly and none, we support
|
||||||
// these two policies at the bucket level.
|
// these two policies at the bucket level.
|
||||||
func (a AzureObjects) SetBucketPolicies(bucket string, policyInfo policy.BucketAccessPolicy) error {
|
func (a *azureObjects) SetBucketPolicies(bucket string, policyInfo policy.BucketAccessPolicy) error {
|
||||||
var policies []BucketAccessPolicy
|
var policies []BucketAccessPolicy
|
||||||
|
|
||||||
for prefix, policy := range policy.GetPolicies(policyInfo.Statements, bucket) {
|
for prefix, policy := range policy.GetPolicies(policyInfo.Statements, bucket) {
|
||||||
@ -626,7 +626,7 @@ func (a AzureObjects) SetBucketPolicies(bucket string, policyInfo policy.BucketA
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetBucketPolicies - Get the container ACL and convert it to canonical []bucketAccessPolicy
|
// GetBucketPolicies - Get the container ACL and convert it to canonical []bucketAccessPolicy
|
||||||
func (a AzureObjects) GetBucketPolicies(bucket string) (policy.BucketAccessPolicy, error) {
|
func (a *azureObjects) GetBucketPolicies(bucket string) (policy.BucketAccessPolicy, error) {
|
||||||
policyInfo := policy.BucketAccessPolicy{Version: "2012-10-17"}
|
policyInfo := policy.BucketAccessPolicy{Version: "2012-10-17"}
|
||||||
perm, err := a.client.GetContainerPermissions(bucket, 0, "")
|
perm, err := a.client.GetContainerPermissions(bucket, 0, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -644,7 +644,7 @@ func (a AzureObjects) GetBucketPolicies(bucket string) (policy.BucketAccessPolic
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DeleteBucketPolicies - Set the container ACL to "private"
|
// DeleteBucketPolicies - Set the container ACL to "private"
|
||||||
func (a AzureObjects) DeleteBucketPolicies(bucket string) error {
|
func (a *azureObjects) DeleteBucketPolicies(bucket string) error {
|
||||||
perm := storage.ContainerPermissions{
|
perm := storage.ContainerPermissions{
|
||||||
AccessType: storage.ContainerAccessTypePrivate,
|
AccessType: storage.ContainerAccessTypePrivate,
|
||||||
AccessPolicies: nil,
|
AccessPolicies: nil,
|
||||||
|
@ -24,7 +24,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// AnonPutObject creates a new object anonymously with the incoming data,
|
// AnonPutObject creates a new object anonymously with the incoming data,
|
||||||
func (l *s3Gateway) AnonPutObject(bucket string, object string, size int64, data io.Reader, metadata map[string]string, sha256sum string) (ObjectInfo, error) {
|
func (l *s3Objects) AnonPutObject(bucket string, object string, size int64, data io.Reader, metadata map[string]string, sha256sum string) (ObjectInfo, error) {
|
||||||
var sha256sumBytes []byte
|
var sha256sumBytes []byte
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
@ -54,7 +54,7 @@ func (l *s3Gateway) AnonPutObject(bucket string, object string, size int64, data
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AnonGetObject - Get object anonymously
|
// AnonGetObject - Get object anonymously
|
||||||
func (l *s3Gateway) AnonGetObject(bucket string, key string, startOffset int64, length int64, writer io.Writer) error {
|
func (l *s3Objects) AnonGetObject(bucket string, key string, startOffset int64, length int64, writer io.Writer) error {
|
||||||
r := minio.NewGetReqHeaders()
|
r := minio.NewGetReqHeaders()
|
||||||
if err := r.SetRange(startOffset, startOffset+length-1); err != nil {
|
if err := r.SetRange(startOffset, startOffset+length-1); err != nil {
|
||||||
return s3ToObjectError(traceError(err), bucket, key)
|
return s3ToObjectError(traceError(err), bucket, key)
|
||||||
@ -74,7 +74,7 @@ func (l *s3Gateway) AnonGetObject(bucket string, key string, startOffset int64,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AnonGetObjectInfo - Get object info anonymously
|
// AnonGetObjectInfo - Get object info anonymously
|
||||||
func (l *s3Gateway) AnonGetObjectInfo(bucket string, object string) (ObjectInfo, error) {
|
func (l *s3Objects) AnonGetObjectInfo(bucket string, object string) (ObjectInfo, error) {
|
||||||
r := minio.NewHeadReqHeaders()
|
r := minio.NewHeadReqHeaders()
|
||||||
oi, err := l.anonClient.StatObject(bucket, object, r)
|
oi, err := l.anonClient.StatObject(bucket, object, r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -85,7 +85,7 @@ func (l *s3Gateway) AnonGetObjectInfo(bucket string, object string) (ObjectInfo,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AnonListObjects - List objects anonymously
|
// AnonListObjects - List objects anonymously
|
||||||
func (l *s3Gateway) AnonListObjects(bucket string, prefix string, marker string, delimiter string, maxKeys int) (ListObjectsInfo, error) {
|
func (l *s3Objects) AnonListObjects(bucket string, prefix string, marker string, delimiter string, maxKeys int) (ListObjectsInfo, error) {
|
||||||
result, err := l.anonClient.ListObjects(bucket, prefix, marker, delimiter, maxKeys)
|
result, err := l.anonClient.ListObjects(bucket, prefix, marker, delimiter, maxKeys)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ListObjectsInfo{}, s3ToObjectError(traceError(err), bucket)
|
return ListObjectsInfo{}, s3ToObjectError(traceError(err), bucket)
|
||||||
@ -95,7 +95,7 @@ func (l *s3Gateway) AnonListObjects(bucket string, prefix string, marker string,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AnonGetBucketInfo - Get bucket metadata anonymously.
|
// AnonGetBucketInfo - Get bucket metadata anonymously.
|
||||||
func (l *s3Gateway) AnonGetBucketInfo(bucket string) (BucketInfo, error) {
|
func (l *s3Objects) AnonGetBucketInfo(bucket string) (BucketInfo, error) {
|
||||||
if exists, err := l.anonClient.BucketExists(bucket); err != nil {
|
if exists, err := l.anonClient.BucketExists(bucket); err != nil {
|
||||||
return BucketInfo{}, s3ToObjectError(traceError(err), bucket)
|
return BucketInfo{}, s3ToObjectError(traceError(err), bucket)
|
||||||
} else if !exists {
|
} else if !exists {
|
||||||
|
@ -17,26 +17,26 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
// HealBucket - Not relevant.
|
// HealBucket - Not relevant.
|
||||||
func (l *s3Gateway) HealBucket(bucket string) error {
|
func (l *s3Objects) HealBucket(bucket string) error {
|
||||||
return traceError(NotImplemented{})
|
return traceError(NotImplemented{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListBucketsHeal - Not relevant.
|
// ListBucketsHeal - Not relevant.
|
||||||
func (l *s3Gateway) ListBucketsHeal() (buckets []BucketInfo, err error) {
|
func (l *s3Objects) ListBucketsHeal() (buckets []BucketInfo, err error) {
|
||||||
return []BucketInfo{}, traceError(NotImplemented{})
|
return []BucketInfo{}, traceError(NotImplemented{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// HealObject - Not relevant.
|
// HealObject - Not relevant.
|
||||||
func (l *s3Gateway) HealObject(bucket string, object string) (int, int, error) {
|
func (l *s3Objects) HealObject(bucket string, object string) (int, int, error) {
|
||||||
return 0, 0, traceError(NotImplemented{})
|
return 0, 0, traceError(NotImplemented{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListObjectsHeal - Not relevant.
|
// ListObjectsHeal - Not relevant.
|
||||||
func (l *s3Gateway) ListObjectsHeal(bucket string, prefix string, marker string, delimiter string, maxKeys int) (ListObjectsInfo, error) {
|
func (l *s3Objects) ListObjectsHeal(bucket string, prefix string, marker string, delimiter string, maxKeys int) (ListObjectsInfo, error) {
|
||||||
return ListObjectsInfo{}, traceError(NotImplemented{})
|
return ListObjectsInfo{}, traceError(NotImplemented{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListUploadsHeal - Not relevant.
|
// ListUploadsHeal - Not relevant.
|
||||||
func (l *s3Gateway) ListUploadsHeal(bucket string, prefix string, marker string, uploadIDMarker string, delimiter string, maxUploads int) (ListMultipartsInfo, error) {
|
func (l *s3Objects) ListUploadsHeal(bucket string, prefix string, marker string, uploadIDMarker string, delimiter string, maxUploads int) (ListMultipartsInfo, error) {
|
||||||
return ListMultipartsInfo{}, traceError(NotImplemented{})
|
return ListMultipartsInfo{}, traceError(NotImplemented{})
|
||||||
}
|
}
|
||||||
|
@ -91,8 +91,8 @@ func s3ToObjectError(err error, params ...string) error {
|
|||||||
return e
|
return e
|
||||||
}
|
}
|
||||||
|
|
||||||
// s3Gateway implements gateway for Minio and S3 compatible object storage servers.
|
// s3Objects implements gateway for Minio and S3 compatible object storage servers.
|
||||||
type s3Gateway struct {
|
type s3Objects struct {
|
||||||
Client *minio.Core
|
Client *minio.Core
|
||||||
anonClient *minio.Core
|
anonClient *minio.Core
|
||||||
}
|
}
|
||||||
@ -115,7 +115,7 @@ func newS3Gateway(endpoint string, accessKey, secretKey string, secure bool) (Ga
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return &s3Gateway{
|
return &s3Objects{
|
||||||
Client: client,
|
Client: client,
|
||||||
anonClient: anonClient,
|
anonClient: anonClient,
|
||||||
}, nil
|
}, nil
|
||||||
@ -123,24 +123,24 @@ func newS3Gateway(endpoint string, accessKey, secretKey string, secure bool) (Ga
|
|||||||
|
|
||||||
// Shutdown saves any gateway metadata to disk
|
// Shutdown saves any gateway metadata to disk
|
||||||
// if necessary and reload upon next restart.
|
// if necessary and reload upon next restart.
|
||||||
func (l *s3Gateway) Shutdown() error {
|
func (l *s3Objects) Shutdown() error {
|
||||||
// TODO
|
// TODO
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// StorageInfo is not relevant to S3 backend.
|
// StorageInfo is not relevant to S3 backend.
|
||||||
func (l *s3Gateway) StorageInfo() StorageInfo {
|
func (l *s3Objects) StorageInfo() StorageInfo {
|
||||||
return StorageInfo{}
|
return StorageInfo{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MakeBucket creates a new container on S3 backend.
|
// MakeBucket creates a new container on S3 backend.
|
||||||
func (l *s3Gateway) MakeBucket(bucket string) error {
|
func (l *s3Objects) MakeBucket(bucket string) error {
|
||||||
// will never be called, only satisfy ObjectLayer interface
|
// will never be called, only satisfy ObjectLayer interface
|
||||||
return traceError(NotImplemented{})
|
return traceError(NotImplemented{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// MakeBucket creates a new container on S3 backend.
|
// MakeBucket creates a new container on S3 backend.
|
||||||
func (l *s3Gateway) MakeBucketWithLocation(bucket, location string) error {
|
func (l *s3Objects) MakeBucketWithLocation(bucket, location string) error {
|
||||||
err := l.Client.MakeBucket(bucket, location)
|
err := l.Client.MakeBucket(bucket, location)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return s3ToObjectError(traceError(err), bucket)
|
return s3ToObjectError(traceError(err), bucket)
|
||||||
@ -149,7 +149,7 @@ func (l *s3Gateway) MakeBucketWithLocation(bucket, location string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetBucketInfo gets bucket metadata..
|
// GetBucketInfo gets bucket metadata..
|
||||||
func (l *s3Gateway) GetBucketInfo(bucket string) (BucketInfo, error) {
|
func (l *s3Objects) GetBucketInfo(bucket string) (BucketInfo, error) {
|
||||||
buckets, err := l.Client.ListBuckets()
|
buckets, err := l.Client.ListBuckets()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return BucketInfo{}, s3ToObjectError(traceError(err), bucket)
|
return BucketInfo{}, s3ToObjectError(traceError(err), bucket)
|
||||||
@ -170,7 +170,7 @@ func (l *s3Gateway) GetBucketInfo(bucket string) (BucketInfo, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ListBuckets lists all S3 buckets
|
// ListBuckets lists all S3 buckets
|
||||||
func (l *s3Gateway) ListBuckets() ([]BucketInfo, error) {
|
func (l *s3Objects) ListBuckets() ([]BucketInfo, error) {
|
||||||
buckets, err := l.Client.ListBuckets()
|
buckets, err := l.Client.ListBuckets()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -188,7 +188,7 @@ func (l *s3Gateway) ListBuckets() ([]BucketInfo, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DeleteBucket deletes a bucket on S3
|
// DeleteBucket deletes a bucket on S3
|
||||||
func (l *s3Gateway) DeleteBucket(bucket string) error {
|
func (l *s3Objects) DeleteBucket(bucket string) error {
|
||||||
err := l.Client.RemoveBucket(bucket)
|
err := l.Client.RemoveBucket(bucket)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return s3ToObjectError(traceError(err), bucket)
|
return s3ToObjectError(traceError(err), bucket)
|
||||||
@ -197,7 +197,7 @@ func (l *s3Gateway) DeleteBucket(bucket string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ListObjects lists all blobs in S3 bucket filtered by prefix
|
// ListObjects lists all blobs in S3 bucket filtered by prefix
|
||||||
func (l *s3Gateway) ListObjects(bucket string, prefix string, marker string, delimiter string, maxKeys int) (ListObjectsInfo, error) {
|
func (l *s3Objects) ListObjects(bucket string, prefix string, marker string, delimiter string, maxKeys int) (ListObjectsInfo, error) {
|
||||||
result, err := l.Client.ListObjects(bucket, prefix, marker, delimiter, maxKeys)
|
result, err := l.Client.ListObjects(bucket, prefix, marker, delimiter, maxKeys)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ListObjectsInfo{}, s3ToObjectError(traceError(err), bucket)
|
return ListObjectsInfo{}, s3ToObjectError(traceError(err), bucket)
|
||||||
@ -207,7 +207,7 @@ func (l *s3Gateway) ListObjects(bucket string, prefix string, marker string, del
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ListObjectsV2 lists all blobs in S3 bucket filtered by prefix
|
// ListObjectsV2 lists all blobs in S3 bucket filtered by prefix
|
||||||
func (l *s3Gateway) ListObjectsV2(bucket, prefix, continuationToken string, fetchOwner bool, delimiter string, maxKeys int) (ListObjectsV2Info, error) {
|
func (l *s3Objects) ListObjectsV2(bucket, prefix, continuationToken string, fetchOwner bool, delimiter string, maxKeys int) (ListObjectsV2Info, error) {
|
||||||
result, err := l.Client.ListObjectsV2(bucket, prefix, continuationToken, fetchOwner, delimiter, maxKeys)
|
result, err := l.Client.ListObjectsV2(bucket, prefix, continuationToken, fetchOwner, delimiter, maxKeys)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ListObjectsV2Info{}, s3ToObjectError(traceError(err), bucket)
|
return ListObjectsV2Info{}, s3ToObjectError(traceError(err), bucket)
|
||||||
@ -266,7 +266,7 @@ func fromMinioClientListBucketResult(bucket string, result minio.ListBucketResul
|
|||||||
//
|
//
|
||||||
// startOffset indicates the starting read location of the object.
|
// startOffset indicates the starting read location of the object.
|
||||||
// length indicates the total length of the object.
|
// length indicates the total length of the object.
|
||||||
func (l *s3Gateway) GetObject(bucket string, key string, startOffset int64, length int64, writer io.Writer) error {
|
func (l *s3Objects) GetObject(bucket string, key string, startOffset int64, length int64, writer io.Writer) error {
|
||||||
r := minio.NewGetReqHeaders()
|
r := minio.NewGetReqHeaders()
|
||||||
if err := r.SetRange(startOffset, startOffset+length-1); err != nil {
|
if err := r.SetRange(startOffset, startOffset+length-1); err != nil {
|
||||||
return s3ToObjectError(traceError(err), bucket, key)
|
return s3ToObjectError(traceError(err), bucket, key)
|
||||||
@ -303,7 +303,7 @@ func fromMinioClientObjectInfo(bucket string, oi minio.ObjectInfo) ObjectInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetObjectInfo reads object info and replies back ObjectInfo
|
// GetObjectInfo reads object info and replies back ObjectInfo
|
||||||
func (l *s3Gateway) GetObjectInfo(bucket string, object string) (objInfo ObjectInfo, err error) {
|
func (l *s3Objects) GetObjectInfo(bucket string, object string) (objInfo ObjectInfo, err error) {
|
||||||
r := minio.NewHeadReqHeaders()
|
r := minio.NewHeadReqHeaders()
|
||||||
oi, err := l.Client.StatObject(bucket, object, r)
|
oi, err := l.Client.StatObject(bucket, object, r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -314,7 +314,7 @@ func (l *s3Gateway) GetObjectInfo(bucket string, object string) (objInfo ObjectI
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PutObject creates a new object with the incoming data,
|
// PutObject creates a new object with the incoming data,
|
||||||
func (l *s3Gateway) PutObject(bucket string, object string, size int64, data io.Reader, metadata map[string]string, sha256sum string) (ObjectInfo, error) {
|
func (l *s3Objects) PutObject(bucket string, object string, size int64, data io.Reader, metadata map[string]string, sha256sum string) (ObjectInfo, error) {
|
||||||
var sha256sumBytes []byte
|
var sha256sumBytes []byte
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
@ -344,7 +344,7 @@ func (l *s3Gateway) PutObject(bucket string, object string, size int64, data io.
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CopyObject copies a blob from source container to destination container.
|
// CopyObject copies a blob from source container to destination container.
|
||||||
func (l *s3Gateway) CopyObject(srcBucket string, srcObject string, destBucket string, destObject string, metadata map[string]string) (ObjectInfo, error) {
|
func (l *s3Objects) CopyObject(srcBucket string, srcObject string, destBucket string, destObject string, metadata map[string]string) (ObjectInfo, error) {
|
||||||
err := l.Client.CopyObject(destBucket, destObject, path.Join(srcBucket, srcObject), minio.CopyConditions{})
|
err := l.Client.CopyObject(destBucket, destObject, path.Join(srcBucket, srcObject), minio.CopyConditions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ObjectInfo{}, s3ToObjectError(traceError(err), srcBucket, srcObject)
|
return ObjectInfo{}, s3ToObjectError(traceError(err), srcBucket, srcObject)
|
||||||
@ -359,7 +359,7 @@ func (l *s3Gateway) CopyObject(srcBucket string, srcObject string, destBucket st
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DeleteObject deletes a blob in bucket
|
// DeleteObject deletes a blob in bucket
|
||||||
func (l *s3Gateway) DeleteObject(bucket string, object string) error {
|
func (l *s3Objects) DeleteObject(bucket string, object string) error {
|
||||||
err := l.Client.RemoveObject(bucket, object)
|
err := l.Client.RemoveObject(bucket, object)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return s3ToObjectError(traceError(err), bucket, object)
|
return s3ToObjectError(traceError(err), bucket, object)
|
||||||
@ -407,7 +407,7 @@ func fromMinioClientListMultipartsInfo(lmur minio.ListMultipartUploadsResult) Li
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ListMultipartUploads lists all multipart uploads.
|
// ListMultipartUploads lists all multipart uploads.
|
||||||
func (l *s3Gateway) ListMultipartUploads(bucket string, prefix string, keyMarker string, uploadIDMarker string, delimiter string, maxUploads int) (ListMultipartsInfo, error) {
|
func (l *s3Objects) ListMultipartUploads(bucket string, prefix string, keyMarker string, uploadIDMarker string, delimiter string, maxUploads int) (ListMultipartsInfo, error) {
|
||||||
result, err := l.Client.ListMultipartUploads(bucket, prefix, keyMarker, uploadIDMarker, delimiter, maxUploads)
|
result, err := l.Client.ListMultipartUploads(bucket, prefix, keyMarker, uploadIDMarker, delimiter, maxUploads)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ListMultipartsInfo{}, err
|
return ListMultipartsInfo{}, err
|
||||||
@ -435,12 +435,12 @@ func toMinioClientMetadata(metadata map[string]string) map[string][]string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewMultipartUpload upload object in multiple parts
|
// NewMultipartUpload upload object in multiple parts
|
||||||
func (l *s3Gateway) NewMultipartUpload(bucket string, object string, metadata map[string]string) (uploadID string, err error) {
|
func (l *s3Objects) NewMultipartUpload(bucket string, object string, metadata map[string]string) (uploadID string, err error) {
|
||||||
return l.Client.NewMultipartUpload(bucket, object, toMinioClientMetadata(metadata))
|
return l.Client.NewMultipartUpload(bucket, object, toMinioClientMetadata(metadata))
|
||||||
}
|
}
|
||||||
|
|
||||||
// CopyObjectPart copy part of object to other bucket and object
|
// CopyObjectPart copy part of object to other bucket and object
|
||||||
func (l *s3Gateway) CopyObjectPart(srcBucket string, srcObject string, destBucket string, destObject string, uploadID string, partID int, startOffset int64, length int64) (info PartInfo, err error) {
|
func (l *s3Objects) CopyObjectPart(srcBucket string, srcObject string, destBucket string, destObject string, uploadID string, partID int, startOffset int64, length int64) (info PartInfo, err error) {
|
||||||
// FIXME: implement CopyObjectPart
|
// FIXME: implement CopyObjectPart
|
||||||
return PartInfo{}, traceError(NotImplemented{})
|
return PartInfo{}, traceError(NotImplemented{})
|
||||||
}
|
}
|
||||||
@ -456,7 +456,7 @@ func fromMinioClientObjectPart(op minio.ObjectPart) PartInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PutObjectPart puts a part of object in bucket
|
// PutObjectPart puts a part of object in bucket
|
||||||
func (l *s3Gateway) PutObjectPart(bucket string, object string, uploadID string, partID int, size int64, data io.Reader, md5Hex string, sha256sum string) (PartInfo, error) {
|
func (l *s3Objects) PutObjectPart(bucket string, object string, uploadID string, partID int, size int64, data io.Reader, md5Hex string, sha256sum string) (PartInfo, error) {
|
||||||
md5HexBytes, err := hex.DecodeString(md5Hex)
|
md5HexBytes, err := hex.DecodeString(md5Hex)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return PartInfo{}, err
|
return PartInfo{}, err
|
||||||
@ -501,7 +501,7 @@ func fromMinioClientListPartsInfo(lopr minio.ListObjectPartsResult) ListPartsInf
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ListObjectParts returns all object parts for specified object in specified bucket
|
// ListObjectParts returns all object parts for specified object in specified bucket
|
||||||
func (l *s3Gateway) ListObjectParts(bucket string, object string, uploadID string, partNumberMarker int, maxParts int) (ListPartsInfo, error) {
|
func (l *s3Objects) ListObjectParts(bucket string, object string, uploadID string, partNumberMarker int, maxParts int) (ListPartsInfo, error) {
|
||||||
result, err := l.Client.ListObjectParts(bucket, object, uploadID, partNumberMarker, maxParts)
|
result, err := l.Client.ListObjectParts(bucket, object, uploadID, partNumberMarker, maxParts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ListPartsInfo{}, err
|
return ListPartsInfo{}, err
|
||||||
@ -511,7 +511,7 @@ func (l *s3Gateway) ListObjectParts(bucket string, object string, uploadID strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AbortMultipartUpload aborts a ongoing multipart upload
|
// AbortMultipartUpload aborts a ongoing multipart upload
|
||||||
func (l *s3Gateway) AbortMultipartUpload(bucket string, object string, uploadID string) error {
|
func (l *s3Objects) AbortMultipartUpload(bucket string, object string, uploadID string) error {
|
||||||
return l.Client.AbortMultipartUpload(bucket, object, uploadID)
|
return l.Client.AbortMultipartUpload(bucket, object, uploadID)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -533,7 +533,7 @@ func toMinioClientCompleteParts(parts []completePart) []minio.CompletePart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CompleteMultipartUpload completes ongoing multipart upload and finalizes object
|
// CompleteMultipartUpload completes ongoing multipart upload and finalizes object
|
||||||
func (l *s3Gateway) CompleteMultipartUpload(bucket string, object string, uploadID string, uploadedParts []completePart) (ObjectInfo, error) {
|
func (l *s3Objects) CompleteMultipartUpload(bucket string, object string, uploadID string, uploadedParts []completePart) (ObjectInfo, error) {
|
||||||
err := l.Client.CompleteMultipartUpload(bucket, object, uploadID, toMinioClientCompleteParts(uploadedParts))
|
err := l.Client.CompleteMultipartUpload(bucket, object, uploadID, toMinioClientCompleteParts(uploadedParts))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ObjectInfo{}, s3ToObjectError(traceError(err), bucket, object)
|
return ObjectInfo{}, s3ToObjectError(traceError(err), bucket, object)
|
||||||
@ -543,7 +543,7 @@ func (l *s3Gateway) CompleteMultipartUpload(bucket string, object string, upload
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SetBucketPolicies sets policy on bucket
|
// SetBucketPolicies sets policy on bucket
|
||||||
func (l *s3Gateway) SetBucketPolicies(bucket string, policyInfo policy.BucketAccessPolicy) error {
|
func (l *s3Objects) SetBucketPolicies(bucket string, policyInfo policy.BucketAccessPolicy) error {
|
||||||
if err := l.Client.PutBucketPolicy(bucket, policyInfo); err != nil {
|
if err := l.Client.PutBucketPolicy(bucket, policyInfo); err != nil {
|
||||||
return s3ToObjectError(traceError(err), bucket, "")
|
return s3ToObjectError(traceError(err), bucket, "")
|
||||||
}
|
}
|
||||||
@ -552,7 +552,7 @@ func (l *s3Gateway) SetBucketPolicies(bucket string, policyInfo policy.BucketAcc
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetBucketPolicies will get policy on bucket
|
// GetBucketPolicies will get policy on bucket
|
||||||
func (l *s3Gateway) GetBucketPolicies(bucket string) (policy.BucketAccessPolicy, error) {
|
func (l *s3Objects) GetBucketPolicies(bucket string) (policy.BucketAccessPolicy, error) {
|
||||||
policyInfo, err := l.Client.GetBucketPolicy(bucket)
|
policyInfo, err := l.Client.GetBucketPolicy(bucket)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return policy.BucketAccessPolicy{}, s3ToObjectError(traceError(err), bucket, "")
|
return policy.BucketAccessPolicy{}, s3ToObjectError(traceError(err), bucket, "")
|
||||||
@ -561,7 +561,7 @@ func (l *s3Gateway) GetBucketPolicies(bucket string) (policy.BucketAccessPolicy,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DeleteBucketPolicies deletes all policies on bucket
|
// DeleteBucketPolicies deletes all policies on bucket
|
||||||
func (l *s3Gateway) DeleteBucketPolicies(bucket string) error {
|
func (l *s3Objects) DeleteBucketPolicies(bucket string) error {
|
||||||
if err := l.Client.PutBucketPolicy(bucket, policy.BucketAccessPolicy{}); err != nil {
|
if err := l.Client.PutBucketPolicy(bucket, policy.BucketAccessPolicy{}); err != nil {
|
||||||
return s3ToObjectError(traceError(err), bucket, "")
|
return s3ToObjectError(traceError(err), bucket, "")
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user