From e83ec17e9513473a48714c48e189cc1687e9feb2 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Mon, 20 Nov 2017 22:21:39 +0100 Subject: [PATCH 1/4] s3: Correct comment --- internal/backend/s3/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/backend/s3/config.go b/internal/backend/s3/config.go index 59cdec254..5a2b0c107 100644 --- a/internal/backend/s3/config.go +++ b/internal/backend/s3/config.go @@ -38,7 +38,7 @@ const defaultPrefix = "restic" // ParseConfig parses the string s and extracts the s3 config. The two // supported configuration formats are s3://host/bucketname/prefix and -// s3:host:bucketname/prefix. The host can also be a valid s3 region +// s3:host/bucketname/prefix. The host can also be a valid s3 region // name. If no prefix is given the prefix "restic" will be used. func ParseConfig(s string) (interface{}, error) { switch { From 262b0cd9d42308446dcd4859282ed468ef667d99 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Mon, 20 Nov 2017 22:29:15 +0100 Subject: [PATCH 2/4] s3: Remove default prefix "/restic" --- internal/backend/location/location_test.go | 10 +++++----- internal/backend/s3/config.go | 14 ++++++-------- internal/backend/s3/config_test.go | 16 ++++++++-------- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/internal/backend/location/location_test.go b/internal/backend/location/location_test.go index f8d05ca78..3160a2af7 100644 --- a/internal/backend/location/location_test.go +++ b/internal/backend/location/location_test.go @@ -169,7 +169,7 @@ var parseTests = []struct { Config: s3.Config{ Endpoint: "eu-central-1", Bucket: "bucketname", - Prefix: "restic", + Prefix: "", Connections: 5, }, }, @@ -180,7 +180,7 @@ var parseTests = []struct { Config: s3.Config{ Endpoint: "hostname.foo", Bucket: "bucketname", - Prefix: "restic", + Prefix: "", Connections: 5, }, }, @@ -202,7 +202,7 @@ var parseTests = []struct { Config: s3.Config{ Endpoint: "eu-central-1", Bucket: "repo", - Prefix: "restic", + Prefix: "", Connections: 5, }, }, @@ -224,7 +224,7 @@ var parseTests = []struct { Config: s3.Config{ Endpoint: "hostname.foo", Bucket: "repo", - Prefix: "restic", + Prefix: "", Connections: 5, }, }, @@ -246,7 +246,7 @@ var parseTests = []struct { Config: s3.Config{ Endpoint: "hostname.foo", Bucket: "repo", - Prefix: "restic", + Prefix: "", UseHTTP: true, Connections: 5, }, diff --git a/internal/backend/s3/config.go b/internal/backend/s3/config.go index 5a2b0c107..1760f48c2 100644 --- a/internal/backend/s3/config.go +++ b/internal/backend/s3/config.go @@ -34,8 +34,6 @@ func init() { options.Register("s3", Config{}) } -const defaultPrefix = "restic" - // ParseConfig parses the string s and extracts the s3 config. The two // supported configuration formats are s3://host/bucketname/prefix and // s3:host/bucketname/prefix. The host can also be a valid s3 region @@ -71,15 +69,15 @@ func ParseConfig(s string) (interface{}, error) { } func createConfig(endpoint string, p []string, useHTTP bool) (interface{}, error) { - var prefix string - switch { - case len(p) < 1: + if len(p) < 1 { return nil, errors.New("s3: invalid format, host/region or bucket name not found") - case len(p) == 1 || p[1] == "": - prefix = defaultPrefix - default: + } + + var prefix string + if len(p) > 1 && p[1] != "" { prefix = path.Clean(p[1]) } + cfg := NewConfig() cfg.Endpoint = endpoint cfg.UseHTTP = useHTTP diff --git a/internal/backend/s3/config_test.go b/internal/backend/s3/config_test.go index 8e5f3a420..77a31fda3 100644 --- a/internal/backend/s3/config_test.go +++ b/internal/backend/s3/config_test.go @@ -9,13 +9,13 @@ var configTests = []struct { {"s3://eu-central-1/bucketname", Config{ Endpoint: "eu-central-1", Bucket: "bucketname", - Prefix: "restic", + Prefix: "", Connections: 5, }}, {"s3://eu-central-1/bucketname/", Config{ Endpoint: "eu-central-1", Bucket: "bucketname", - Prefix: "restic", + Prefix: "", Connections: 5, }}, {"s3://eu-central-1/bucketname/prefix/directory", Config{ @@ -33,13 +33,13 @@ var configTests = []struct { {"s3:eu-central-1/foobar", Config{ Endpoint: "eu-central-1", Bucket: "foobar", - Prefix: "restic", + Prefix: "", Connections: 5, }}, {"s3:eu-central-1/foobar/", Config{ Endpoint: "eu-central-1", Bucket: "foobar", - Prefix: "restic", + Prefix: "", Connections: 5, }}, {"s3:eu-central-1/foobar/prefix/directory", Config{ @@ -57,26 +57,26 @@ var configTests = []struct { {"s3:https://hostname:9999/foobar", Config{ Endpoint: "hostname:9999", Bucket: "foobar", - Prefix: "restic", + Prefix: "", Connections: 5, }}, {"s3:https://hostname:9999/foobar/", Config{ Endpoint: "hostname:9999", Bucket: "foobar", - Prefix: "restic", + Prefix: "", Connections: 5, }}, {"s3:http://hostname:9999/foobar", Config{ Endpoint: "hostname:9999", Bucket: "foobar", - Prefix: "restic", + Prefix: "", UseHTTP: true, Connections: 5, }}, {"s3:http://hostname:9999/foobar/", Config{ Endpoint: "hostname:9999", Bucket: "foobar", - Prefix: "restic", + Prefix: "", UseHTTP: true, Connections: 5, }}, From 431ab5aa6a85385ea594a088dcb66b6d79667516 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Mon, 20 Nov 2017 22:32:32 +0100 Subject: [PATCH 3/4] manual: Add hint about old default prefix --- doc/030_preparing_a_new_repo.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/030_preparing_a_new_repo.rst b/doc/030_preparing_a_new_repo.rst index 37b011bdf..35500b28e 100644 --- a/doc/030_preparing_a_new_repo.rst +++ b/doc/030_preparing_a_new_repo.rst @@ -176,6 +176,15 @@ different location, so you need to create it using a different program. Afterwards, the S3 server (``s3.amazonaws.com``) will redirect restic to the correct endpoint. +Until version 0.8.0, restic used a default prefix of ``restic``, so the files +in the bucket were placed in a directory named ``restic``. If you want to +access a repository created with an older version of restic, specify the path +after the bucket name like this: + +.. code-block:: console + + $ restic -r s3:s3.amazonaws.com/bucket_name/restic [...] + For an S3-compatible server that is not Amazon (like Minio, see below), or is only available via HTTP, you can specify the URL to the server like this: ``s3:http://server:port/bucket_name``. From 014cec06f1006462ed6339ad98654012a862af86 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Tue, 21 Nov 2017 21:01:26 +0100 Subject: [PATCH 4/4] Add entry to CHANGELOG --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c95d4ea41..be8c73f53 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,14 @@ released version of restic from the perspective of the user. Important Changes in 0.X.Y ========================== + * The s3 backend used the subdir `restic` within a bucket if no explicit path + after the bucket name was specified. Since this version, restic does not use + this default path any more. If you created a repo on s3 in a bucket without + specifying a path within the bucket, you need to add `/restic` at the end of + the repository specification to access your repo: `s3:s3.amazonaws.com/bucket/restic` + https://github.com/restic/restic/issues/1292 + https://github.com/restic/restic/pull/1437 + * We've added a local cache for metadata so that restic doesn't need to load all metadata (snapshots, indexes, ...) from the repo each time it starts. By default the cache is active, but there's a new global option `--no-cache`