Loading pkg/s3/controllerserver.go +19 −15 Original line number Diff line number Diff line Loading @@ -70,36 +70,40 @@ func (cs *controllerServer) CreateVolume(ctx context.Context, req *csi.CreateVol if err != nil { return nil, fmt.Errorf("failed to check if bucket %s exists: %v", volumeID, err) } if exists { var b *bucket if exists { b, err = s3.getBucket(volumeID) // TODO 如果 bucket 已经存在了,为什么要去检查它是否有 metadata 和 capacity 呢? // 或者说 metadata 的作用是什么? if err != nil { glog.Warningf("failed to get bucket metadata of bucket %s: %v", volumeID, err) // return nil, fmt.Errorf("failed to get bucket metadata of bucket %s: %v", volumeID, err) if err = s3.createPrefix(volumeID, fsPrefix); err != nil { return nil, fmt.Errorf("failed to create prefix %s: %v", fsPrefix, err) glog.Warningf("Bucket %s exists, but failed to get its metadata: %v", volumeID, err) b = &bucket{ Name: volumeID, Mounter: mounter, CapacityBytes: capacityBytes, FSPath: "", CreatedByCsi: false, } } else { // Check if volume capacity requested is bigger than the already existing capacity if capacityBytes > b.CapacityBytes { return nil, status.Error(codes.AlreadyExists, fmt.Sprintf("Volume with the same name: %s but with smaller size already exist", volumeID)) } b.Mounter = mounter } } else { if err = s3.createBucket(volumeID); err != nil { return nil, fmt.Errorf("failed to create volume %s: %v", volumeID, err) } if err = s3.createPrefix(volumeID, fsPrefix); err != nil { return nil, fmt.Errorf("failed to create prefix %s: %v", fsPrefix, err) if err = s3.createPrefix(volumeID, defaultFsPrefix); err != nil { return nil, fmt.Errorf("failed to create prefix %s: %v", defaultFsPrefix, err) } } b := &bucket{ b = &bucket{ Name: volumeID, Mounter: mounter, CapacityBytes: capacityBytes, FSPath: fsPrefix, FSPath: defaultFsPrefix, CreatedByCsi: !exists, } } if err := s3.setBucket(b); err != nil { return nil, fmt.Errorf("Error setting bucket metadata: %v", err) Loading pkg/s3/s3-client.go +4 −3 Original line number Diff line number Diff line Loading @@ -15,7 +15,7 @@ import ( const ( metadataName = ".metadata.json" fsPrefix = "csi-fs" defaultFsPrefix = "csi-fs" ) type s3Client struct { Loading @@ -29,6 +29,7 @@ type bucket struct { Mounter string FSPath string CapacityBytes int64 CreatedByCsi bool } func newS3Client(cfg *Config) (*s3Client, error) { Loading Loading @@ -133,7 +134,7 @@ func (client *s3Client) emptyBucket(bucketName string) error { } // ensure our prefix is also removed return client.minio.RemoveObject(client.ctx, bucketName, fsPrefix, minio.RemoveObjectOptions{}) return client.minio.RemoveObject(client.ctx, bucketName, defaultFsPrefix, minio.RemoveObjectOptions{}) } func (client *s3Client) setBucket(bucket *bucket) error { Loading Loading
pkg/s3/controllerserver.go +19 −15 Original line number Diff line number Diff line Loading @@ -70,36 +70,40 @@ func (cs *controllerServer) CreateVolume(ctx context.Context, req *csi.CreateVol if err != nil { return nil, fmt.Errorf("failed to check if bucket %s exists: %v", volumeID, err) } if exists { var b *bucket if exists { b, err = s3.getBucket(volumeID) // TODO 如果 bucket 已经存在了,为什么要去检查它是否有 metadata 和 capacity 呢? // 或者说 metadata 的作用是什么? if err != nil { glog.Warningf("failed to get bucket metadata of bucket %s: %v", volumeID, err) // return nil, fmt.Errorf("failed to get bucket metadata of bucket %s: %v", volumeID, err) if err = s3.createPrefix(volumeID, fsPrefix); err != nil { return nil, fmt.Errorf("failed to create prefix %s: %v", fsPrefix, err) glog.Warningf("Bucket %s exists, but failed to get its metadata: %v", volumeID, err) b = &bucket{ Name: volumeID, Mounter: mounter, CapacityBytes: capacityBytes, FSPath: "", CreatedByCsi: false, } } else { // Check if volume capacity requested is bigger than the already existing capacity if capacityBytes > b.CapacityBytes { return nil, status.Error(codes.AlreadyExists, fmt.Sprintf("Volume with the same name: %s but with smaller size already exist", volumeID)) } b.Mounter = mounter } } else { if err = s3.createBucket(volumeID); err != nil { return nil, fmt.Errorf("failed to create volume %s: %v", volumeID, err) } if err = s3.createPrefix(volumeID, fsPrefix); err != nil { return nil, fmt.Errorf("failed to create prefix %s: %v", fsPrefix, err) if err = s3.createPrefix(volumeID, defaultFsPrefix); err != nil { return nil, fmt.Errorf("failed to create prefix %s: %v", defaultFsPrefix, err) } } b := &bucket{ b = &bucket{ Name: volumeID, Mounter: mounter, CapacityBytes: capacityBytes, FSPath: fsPrefix, FSPath: defaultFsPrefix, CreatedByCsi: !exists, } } if err := s3.setBucket(b); err != nil { return nil, fmt.Errorf("Error setting bucket metadata: %v", err) Loading
pkg/s3/s3-client.go +4 −3 Original line number Diff line number Diff line Loading @@ -15,7 +15,7 @@ import ( const ( metadataName = ".metadata.json" fsPrefix = "csi-fs" defaultFsPrefix = "csi-fs" ) type s3Client struct { Loading @@ -29,6 +29,7 @@ type bucket struct { Mounter string FSPath string CapacityBytes int64 CreatedByCsi bool } func newS3Client(cfg *Config) (*s3Client, error) { Loading Loading @@ -133,7 +134,7 @@ func (client *s3Client) emptyBucket(bucketName string) error { } // ensure our prefix is also removed return client.minio.RemoveObject(client.ctx, bucketName, fsPrefix, minio.RemoveObjectOptions{}) return client.minio.RemoveObject(client.ctx, bucketName, defaultFsPrefix, minio.RemoveObjectOptions{}) } func (client *s3Client) setBucket(bucket *bucket) error { Loading