Merge pull request #1437 from restic/fix-1292

s3: Document and remove default prefix
This commit is contained in:
Alexander Neumann 2017-11-25 11:34:26 +01:00
commit 1ebf0e8de8
5 changed files with 37 additions and 22 deletions

View file

@ -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`

View file

@ -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``.

View file

@ -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,
},

View file

@ -34,11 +34,9 @@ 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
// 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 {
@ -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

View file

@ -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,
}},