diff --git a/satellite/buckets/db.go b/satellite/buckets/db.go index 2b8d987c1..920e2dfe7 100644 --- a/satellite/buckets/db.go +++ b/satellite/buckets/db.go @@ -25,6 +25,9 @@ var ( // ErrBucketNotFound is an error class for non-existing bucket. ErrBucketNotFound = errs.Class("bucket not found") + + // ErrBucketAlreadyExists is used to indicate that bucket already exists. + ErrBucketAlreadyExists = errs.Class("bucket already exists") ) // Bucket contains information about a specific bucket. diff --git a/satellite/metainfo/endpoint_bucket.go b/satellite/metainfo/endpoint_bucket.go index 8b65352c6..25b84dcf9 100644 --- a/satellite/metainfo/endpoint_bucket.go +++ b/satellite/metainfo/endpoint_bucket.go @@ -114,6 +114,10 @@ func (endpoint *Endpoint) CreateBucket(ctx context.Context, req *pb.BucketCreate bucket, err := endpoint.buckets.CreateBucket(ctx, bucketReq) if err != nil { + if buckets.ErrBucketAlreadyExists.Has(err) { + return nil, rpcstatus.Error(rpcstatus.AlreadyExists, "bucket already exists") + } + endpoint.log.Error("error while creating bucket", zap.String("bucketName", bucketReq.Name), zap.Error(err)) return nil, rpcstatus.Error(rpcstatus.Internal, "unable to create bucket") } diff --git a/satellite/satellitedb/bucketsdb.go b/satellite/satellitedb/bucketsdb.go index 4583ca8b5..6894b6995 100644 --- a/satellite/satellitedb/bucketsdb.go +++ b/satellite/satellitedb/bucketsdb.go @@ -51,6 +51,9 @@ func (db *bucketsDB) CreateBucket(ctx context.Context, bucket buckets.Bucket) (_ optionalFields, ) if err != nil { + if dbx.IsConstraintError(err) { + return buckets.Bucket{}, buckets.ErrBucketAlreadyExists.New("") + } return buckets.Bucket{}, buckets.ErrBucket.Wrap(err) }