From 0a8cf1a6b0a827a3b8cf28de1f2af2ed008d13c1 Mon Sep 17 00:00:00 2001 From: Remco Verhoef Date: Mon, 8 May 2017 14:40:27 -0700 Subject: [PATCH] Allow bucket creation in different regions, closes #4287 and #4241 * I needed to remove the region check from PutBucketHandler --- cmd/gateway-gcs-layer.go | 4 +--- cmd/gateway-handlers.go | 9 --------- cmd/gateway-main.go | 19 ++++++++++++------- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/cmd/gateway-gcs-layer.go b/cmd/gateway-gcs-layer.go index aff7900a8..54a426c7c 100644 --- a/cmd/gateway-gcs-layer.go +++ b/cmd/gateway-gcs-layer.go @@ -206,10 +206,8 @@ func (l *gcsGateway) MakeBucket(bucket string) error { func (l *gcsGateway) MakeBucketWithLocation(bucket, location string) error { bkt := l.client.Bucket(bucket) - // TODO: location - _ = location if err := bkt.Create(l.ctx, l.projectID, &storage.BucketAttrs{ - Location: "US", + Location: location, }); err != nil { return gcsToObjectError(traceError(err), bucket) } diff --git a/cmd/gateway-handlers.go b/cmd/gateway-handlers.go index b7011624e..de364174d 100644 --- a/cmd/gateway-handlers.go +++ b/cmd/gateway-handlers.go @@ -651,15 +651,6 @@ func (api gatewayAPIHandlers) PutBucketHandler(w http.ResponseWriter, r *http.Re return } - // validating region here, because isValidLocationConstraint - // reads body which has been read already. So only validating - // region here. - serverRegion := serverConfig.GetRegion() - if serverRegion != location { - writeErrorResponse(w, ErrInvalidRegion, r.URL) - return - } - bucketLock := globalNSMutex.NewNSLock(bucket, "") bucketLock.Lock() defer bucketLock.Unlock() diff --git a/cmd/gateway-main.go b/cmd/gateway-main.go index f7fb4fe3b..9b4c09bc8 100644 --- a/cmd/gateway-main.go +++ b/cmd/gateway-main.go @@ -180,14 +180,20 @@ const ( ) // Returns access and secretkey set from environment variables. -func mustGetGatewayCredsFromEnv() (accessKey, secretKey string) { +func mustGetGatewayConfigFromEnv() (string, string, string) { // Fetch access keys from environment variables. - accessKey = os.Getenv("MINIO_ACCESS_KEY") - secretKey = os.Getenv("MINIO_SECRET_KEY") + accessKey := os.Getenv("MINIO_ACCESS_KEY") + secretKey := os.Getenv("MINIO_SECRET_KEY") if accessKey == "" || secretKey == "" { fatalIf(errors.New("Missing credentials"), "Access and secret keys are mandatory to run Minio gateway server.") } - return accessKey, secretKey + + region := globalMinioDefaultRegion + if v := os.Getenv("MINIO_REGION"); v != "" { + region = v + } + + return accessKey, secretKey, region } // Set browser setting from environment variables @@ -336,14 +342,13 @@ func gcsGatewayMain(ctx *cli.Context) { // Handler for 'minio gateway'. func gatewayMain(ctx *cli.Context, backendType gatewayBackend) { // Fetch access and secret key from env. - accessKey, secretKey := mustGetGatewayCredsFromEnv() + accessKey, secretKey, region := mustGetGatewayConfigFromEnv() // Fetch browser env setting mustSetBrowserSettingFromEnv() // Initialize new gateway config. - - newGatewayConfig(accessKey, secretKey, globalMinioDefaultRegion) + newGatewayConfig(accessKey, secretKey, region) // Get quiet flag from command line argument. quietFlag := ctx.Bool("quiet") || ctx.GlobalBool("quiet")