diff options
Diffstat (limited to 'weed/s3api/bucket_metadata.go')
| -rw-r--r-- | weed/s3api/bucket_metadata.go | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/weed/s3api/bucket_metadata.go b/weed/s3api/bucket_metadata.go index e660237de..f4088e6b3 100644 --- a/weed/s3api/bucket_metadata.go +++ b/weed/s3api/bucket_metadata.go @@ -1,16 +1,12 @@ package s3api import ( - "bytes" "encoding/json" - "github.com/aws/aws-sdk-go/private/protocol/json/jsonutil" "github.com/aws/aws-sdk-go/service/s3" "github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/s3api/s3_constants" "github.com/seaweedfs/seaweedfs/weed/s3api/s3account" - - //"github.com/seaweedfs/seaweedfs/weed/s3api" "github.com/seaweedfs/seaweedfs/weed/s3api/s3err" "github.com/seaweedfs/seaweedfs/weed/util" "math" @@ -23,7 +19,7 @@ var loadBucketMetadataFromFiler = func(r *BucketRegistry, bucketName string) (*B return nil, err } - return buildBucketMetadata(entry), nil + return buildBucketMetadata(r.s3a.accountManager, entry), nil } type BucketMetaData struct { @@ -77,13 +73,13 @@ func (r *BucketRegistry) init() error { } func (r *BucketRegistry) LoadBucketMetadata(entry *filer_pb.Entry) { - bucketMetadata := buildBucketMetadata(entry) + bucketMetadata := buildBucketMetadata(r.s3a.accountManager, entry) r.metadataCacheLock.Lock() defer r.metadataCacheLock.Unlock() r.metadataCache[entry.Name] = bucketMetadata } -func buildBucketMetadata(entry *filer_pb.Entry) *BucketMetaData { +func buildBucketMetadata(accountManager *s3account.AccountManager, entry *filer_pb.Entry) *BucketMetaData { entryJson, _ := json.Marshal(entry) glog.V(3).Infof("build bucket metadata,entry=%s", entryJson) bucketMetadata := &BucketMetaData{ @@ -112,22 +108,29 @@ func buildBucketMetadata(entry *filer_pb.Entry) *BucketMetaData { } //access control policy - acpBytes, ok := entry.Extended[s3_constants.ExtAcpKey] - if ok { - var acp s3.AccessControlPolicy - err := jsonutil.UnmarshalJSON(&acp, bytes.NewReader(acpBytes)) - if err == nil { - //validate owner - if acp.Owner != nil && acp.Owner.ID != nil { - bucketMetadata.Owner = acp.Owner - } else { - glog.Warningf("bucket ownerId is empty! bucket: %s", bucketMetadata.Name) + //owner + acpOwnerBytes, ok := entry.Extended[s3_constants.ExtAmzOwnerKey] + if ok && len(acpOwnerBytes) > 0 { + ownerAccountId := string(acpOwnerBytes) + ownerAccountName, exists := accountManager.IdNameMapping[ownerAccountId] + if !exists { + glog.Warningf("owner[id=%s] is invalid, bucket: %s", ownerAccountId, bucketMetadata.Name) + } else { + bucketMetadata.Owner = &s3.Owner{ + ID: &ownerAccountId, + DisplayName: &ownerAccountName, } - - //acl - bucketMetadata.Acl = acp.Grants + } + } + //grants + acpGrantsBytes, ok := entry.Extended[s3_constants.ExtAmzAclKey] + if ok && len(acpGrantsBytes) > 0 { + var grants []*s3.Grant + err := json.Unmarshal(acpGrantsBytes, &grants) + if err == nil { + bucketMetadata.Acl = grants } else { - glog.Warningf("Unmarshal ACP: %s(%v), bucket: %s", string(acpBytes), err, bucketMetadata.Name) + glog.Warningf("Unmarshal ACP grants: %s(%v), bucket: %s", string(acpGrantsBytes), err, bucketMetadata.Name) } } } |
