Skip to content

Commit 6b0f80f

Browse files
Add MakeBucket forceCreate option a MinIO specific extension (#2108)
1 parent 5d96728 commit 6b0f80f

File tree

1 file changed

+20
-13
lines changed

1 file changed

+20
-13
lines changed

api-put-bucket.go

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,48 +33,52 @@ func (c *Client) makeBucket(ctx context.Context, bucketName string, opts MakeBuc
3333
return err
3434
}
3535

36-
err = c.doMakeBucket(ctx, bucketName, opts.Region, opts.ObjectLocking)
36+
err = c.doMakeBucket(ctx, bucketName, opts)
3737
if err != nil && (opts.Region == "" || opts.Region == "us-east-1") {
3838
if resp, ok := err.(ErrorResponse); ok && resp.Code == "AuthorizationHeaderMalformed" && resp.Region != "" {
39-
err = c.doMakeBucket(ctx, bucketName, resp.Region, opts.ObjectLocking)
39+
opts.Region = resp.Region
40+
err = c.doMakeBucket(ctx, bucketName, opts)
4041
}
4142
}
4243
return err
4344
}
4445

45-
func (c *Client) doMakeBucket(ctx context.Context, bucketName, location string, objectLockEnabled bool) (err error) {
46+
func (c *Client) doMakeBucket(ctx context.Context, bucketName string, opts MakeBucketOptions) (err error) {
4647
defer func() {
4748
// Save the location into cache on a successful makeBucket response.
4849
if err == nil {
49-
c.bucketLocCache.Set(bucketName, location)
50+
c.bucketLocCache.Set(bucketName, opts.Region)
5051
}
5152
}()
5253

5354
// If location is empty, treat is a default region 'us-east-1'.
54-
if location == "" {
55-
location = "us-east-1"
55+
if opts.Region == "" {
56+
opts.Region = "us-east-1"
5657
// For custom region clients, default
5758
// to custom region instead not 'us-east-1'.
5859
if c.region != "" {
59-
location = c.region
60+
opts.Region = c.region
6061
}
6162
}
6263
// PUT bucket request metadata.
6364
reqMetadata := requestMetadata{
6465
bucketName: bucketName,
65-
bucketLocation: location,
66+
bucketLocation: opts.Region,
6667
}
6768

68-
if objectLockEnabled {
69-
headers := make(http.Header)
69+
headers := make(http.Header)
70+
if opts.ObjectLocking {
7071
headers.Add("x-amz-bucket-object-lock-enabled", "true")
71-
reqMetadata.customHeader = headers
7272
}
73+
if opts.ForceCreate {
74+
headers.Add("x-minio-force-create", "true")
75+
}
76+
reqMetadata.customHeader = headers
7377

7478
// If location is not 'us-east-1' create bucket location config.
75-
if location != "us-east-1" && location != "" {
79+
if opts.Region != "us-east-1" && opts.Region != "" {
7680
createBucketConfig := createBucketConfiguration{}
77-
createBucketConfig.Location = location
81+
createBucketConfig.Location = opts.Region
7882
var createBucketConfigBytes []byte
7983
createBucketConfigBytes, err = xml.Marshal(createBucketConfig)
8084
if err != nil {
@@ -109,6 +113,9 @@ type MakeBucketOptions struct {
109113
Region string
110114
// Enable object locking
111115
ObjectLocking bool
116+
117+
// ForceCreate - this is a MinIO specific extension.
118+
ForceCreate bool
112119
}
113120

114121
// MakeBucket creates a new bucket with bucketName with a context to control cancellations and timeouts.

0 commit comments

Comments
 (0)