From 1204c6449e7e069822ce4da3532dd03fcaf3cfd8 Mon Sep 17 00:00:00 2001 From: reus Date: Tue, 21 Jan 2025 11:35:17 +0800 Subject: [PATCH] fileservice: return AWS region detection error in ObjectStorageArguments.validate --- pkg/fileservice/object_storage_arguments.go | 10 ++++------ .../object_storage_arguments_test.go | 19 ++++++++++++++++++- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/pkg/fileservice/object_storage_arguments.go b/pkg/fileservice/object_storage_arguments.go index bc592fa4a0c54..6b5af0f7be691 100644 --- a/pkg/fileservice/object_storage_arguments.go +++ b/pkg/fileservice/object_storage_arguments.go @@ -23,8 +23,6 @@ import ( "strings" "github.com/matrixorigin/matrixone/pkg/common/moerr" - "github.com/matrixorigin/matrixone/pkg/logutil" - "go.uber.org/zap" ) type ObjectStorageArguments struct { @@ -153,23 +151,23 @@ func (o *ObjectStorageArguments) validate() error { // region if o.Region == "" { - // 腾讯云 if o.Endpoint != "" && strings.Contains(o.Endpoint, "myqcloud.com") { + // 腾讯云 matches := qcloudEndpointPattern.FindStringSubmatch(o.Endpoint) if len(matches) > 0 { o.Region = matches[1] } - } else { + } else if o.Endpoint != "" && strings.Contains(o.Endpoint, "amazonaws.com") { + // AWS // try to get region from bucket - // only works for AWS S3 resp, err := http.Head("https://" + o.Bucket + ".s3.amazonaws.com") if err == nil { if value := resp.Header.Get("x-amz-bucket-region"); value != "" { o.Region = value } } else { - logutil.Debug("error", zap.Error(err)) + return err } } diff --git a/pkg/fileservice/object_storage_arguments_test.go b/pkg/fileservice/object_storage_arguments_test.go index bed9c71b20e1a..6bf25a4121d5c 100644 --- a/pkg/fileservice/object_storage_arguments_test.go +++ b/pkg/fileservice/object_storage_arguments_test.go @@ -162,8 +162,25 @@ func TestQCloudRegion(t *testing.T) { func TestAWSRegion(t *testing.T) { args := ObjectStorageArguments{ + Endpoint: "amazonaws.com", + Bucket: "aws", // hope it will not change its region } - args.validate() + assert.Nil(t, args.validate()) assert.Equal(t, "us-east-1", args.Region) + + args = ObjectStorageArguments{ + Endpoint: "amazonaws.com", + + Bucket: "fdsafdsafasdfsdafsadfsdafdsafewrewqrweqrewrwerwqrew", // invalid bucket + } + assert.Nil(t, args.validate()) + assert.Equal(t, "", args.Region) + + args = ObjectStorageArguments{ + Endpoint: "amazonaws.com", + + Bucket: "a/b/c", // invalid bucket + } + assert.NotNil(t, args.validate()) }