From c9cc724b3134ec9079c779fc7b8b7085850df159 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Sat, 17 Jun 2017 22:15:58 +0200 Subject: [PATCH] s3: Split Create() from Open() --- src/cmds/restic/global.go | 2 +- src/restic/backend/s3/s3.go | 21 ++++++++++++++++----- src/restic/backend/s3/s3_test.go | 8 ++++---- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/cmds/restic/global.go b/src/cmds/restic/global.go index fe266aa56..614bf3b9b 100644 --- a/src/cmds/restic/global.go +++ b/src/cmds/restic/global.go @@ -471,7 +471,7 @@ func create(s string, opts options.Options) (restic.Backend, error) { case "sftp": return sftp.Create(cfg.(sftp.Config)) case "s3": - return s3.Open(cfg.(s3.Config)) + return s3.Create(cfg.(s3.Config)) case "swift": return swift.Open(cfg.(swift.Config)) case "b2": diff --git a/src/restic/backend/s3/s3.go b/src/restic/backend/s3/s3.go index e09ed59d2..cb3aaf5e1 100644 --- a/src/restic/backend/s3/s3.go +++ b/src/restic/backend/s3/s3.go @@ -31,9 +31,7 @@ var _ restic.Backend = &Backend{} const defaultLayout = "default" -// Open opens the S3 backend at bucket and region. The bucket is created if it -// does not exist yet. -func Open(cfg Config) (restic.Backend, error) { +func open(cfg Config) (*Backend, error) { debug.Log("open, config %#v", cfg) if cfg.MaxRetries > 0 { @@ -65,7 +63,20 @@ func Open(cfg Config) (restic.Backend, error) { be.Layout = l - found, err := client.BucketExists(cfg.Bucket) + return be, nil +} + +// Open opens the S3 backend at bucket and region. The bucket is created if it +// does not exist yet. +func Open(cfg Config) (restic.Backend, error) { + return open(cfg) +} + +// Create opens the S3 backend at bucket and region and creates the bucket if +// it does not exist yet. +func Create(cfg Config) (restic.Backend, error) { + be, err := open(cfg) + found, err := be.client.BucketExists(cfg.Bucket) if err != nil { debug.Log("BucketExists(%v) returned err %v", cfg.Bucket, err) return nil, errors.Wrap(err, "client.BucketExists") @@ -73,7 +84,7 @@ func Open(cfg Config) (restic.Backend, error) { if !found { // create new bucket with default ACL in default region - err = client.MakeBucket(cfg.Bucket, "") + err = be.client.MakeBucket(cfg.Bucket, "") if err != nil { return nil, errors.Wrap(err, "client.MakeBucket") } diff --git a/src/restic/backend/s3/s3_test.go b/src/restic/backend/s3/s3_test.go index 7d080063a..72600061e 100644 --- a/src/restic/backend/s3/s3_test.go +++ b/src/restic/backend/s3/s3_test.go @@ -103,9 +103,9 @@ type MinioTestConfig struct { stopServer func() } -func openS3(t testing.TB, cfg MinioTestConfig) (be restic.Backend, err error) { +func createS3(t testing.TB, cfg MinioTestConfig) (be restic.Backend, err error) { for i := 0; i < 10; i++ { - be, err = s3.Open(cfg.Config) + be, err = s3.Create(cfg.Config) if err != nil { t.Logf("s3 open: try %d: error %v", i, err) time.Sleep(500 * time.Millisecond) @@ -142,7 +142,7 @@ func newMinioTestSuite(ctx context.Context, t testing.TB) *test.Suite { Create: func(config interface{}) (restic.Backend, error) { cfg := config.(MinioTestConfig) - be, err := openS3(t, cfg) + be, err := createS3(t, cfg) if err != nil { return nil, err } @@ -236,7 +236,7 @@ func newS3TestSuite(t testing.TB) *test.Suite { Create: func(config interface{}) (restic.Backend, error) { cfg := config.(s3.Config) - be, err := s3.Open(cfg) + be, err := s3.Create(cfg) if err != nil { return nil, err }