mirror of
https://github.com/octoleo/restic.git
synced 2024-11-11 07:41:03 +00:00
Deprecate s3legacy layout
This commit is contained in:
parent
510f6f06b0
commit
591b421c4a
@ -1,7 +1,7 @@
|
|||||||
Change: Deprecate legacy index format
|
Change: Deprecate legacy index format and s3legacy layout
|
||||||
|
|
||||||
Support for the legacy index format used by restic before version 0.2.0 has
|
Support for the legacy index format used by restic before version 0.2.0 has
|
||||||
been depreacted and will be removed in the next minor restic version. You can
|
been deprecated and will be removed in the next minor restic version. You can
|
||||||
use `restic repair index` to update the index to the current format.
|
use `restic repair index` to update the index to the current format.
|
||||||
|
|
||||||
It is possible to temporarily reenable support for the legacy index format by
|
It is possible to temporarily reenable support for the legacy index format by
|
||||||
@ -9,5 +9,15 @@ setting the environment variable
|
|||||||
`RESTIC_FEATURES=deprecate-legacy-index=false`. Note that this feature flag
|
`RESTIC_FEATURES=deprecate-legacy-index=false`. Note that this feature flag
|
||||||
will be removed in the next minor restic version.
|
will be removed in the next minor restic version.
|
||||||
|
|
||||||
|
Support for the s3legacy layout used for the S3 backend before restic 0.7.0
|
||||||
|
has been deprecated and will be removed in the next minor restic version. You
|
||||||
|
can migrate your S3 repository using `RESTIC_FEATURES=deprecate-s3-legacy-layout=false restic migrate s3_layout`.
|
||||||
|
|
||||||
|
It is possible to temporarily reenable support for the legacy s3layout by
|
||||||
|
setting the environment variable
|
||||||
|
`RESTIC_FEATURES=deprecate-s3-legacy-layout=false`. Note that this feature flag
|
||||||
|
will be removed in the next minor restic version.
|
||||||
|
|
||||||
https://github.com/restic/restic/issues/4602
|
https://github.com/restic/restic/issues/4602
|
||||||
https://github.com/restic/restic/pull/4724
|
https://github.com/restic/restic/pull/4724
|
||||||
|
https://github.com/restic/restic/pull/4743
|
||||||
|
@ -11,6 +11,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/restic/restic/internal/feature"
|
||||||
"github.com/restic/restic/internal/filter"
|
"github.com/restic/restic/internal/filter"
|
||||||
"github.com/restic/restic/internal/restic"
|
"github.com/restic/restic/internal/restic"
|
||||||
rtest "github.com/restic/restic/internal/test"
|
rtest "github.com/restic/restic/internal/test"
|
||||||
@ -274,6 +275,7 @@ func TestRestoreNoMetadataOnIgnoredIntermediateDirs(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestRestoreLocalLayout(t *testing.T) {
|
func TestRestoreLocalLayout(t *testing.T) {
|
||||||
|
defer feature.TestSetFlag(t, feature.Flag, feature.DeprecateS3LegacyLayout, false)()
|
||||||
env, cleanup := withTestEnvironment(t)
|
env, cleanup := withTestEnvironment(t)
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/restic/restic/internal/backend"
|
"github.com/restic/restic/internal/backend"
|
||||||
"github.com/restic/restic/internal/debug"
|
"github.com/restic/restic/internal/debug"
|
||||||
"github.com/restic/restic/internal/errors"
|
"github.com/restic/restic/internal/errors"
|
||||||
|
"github.com/restic/restic/internal/feature"
|
||||||
"github.com/restic/restic/internal/fs"
|
"github.com/restic/restic/internal/fs"
|
||||||
"github.com/restic/restic/internal/restic"
|
"github.com/restic/restic/internal/restic"
|
||||||
)
|
)
|
||||||
@ -93,6 +94,8 @@ func hasBackendFile(ctx context.Context, fs Filesystem, dir string) (bool, error
|
|||||||
// cannot be detected automatically.
|
// cannot be detected automatically.
|
||||||
var ErrLayoutDetectionFailed = errors.New("auto-detecting the filesystem layout failed")
|
var ErrLayoutDetectionFailed = errors.New("auto-detecting the filesystem layout failed")
|
||||||
|
|
||||||
|
var ErrLegacyLayoutFound = errors.New("detected legacy S3 layout. Use `RESTIC_FEATURES=deprecate-s3-legacy-layout=false restic migrate s3_layout` to migrate your repository")
|
||||||
|
|
||||||
// DetectLayout tries to find out which layout is used in a local (or sftp)
|
// DetectLayout tries to find out which layout is used in a local (or sftp)
|
||||||
// filesystem at the given path. If repo is nil, an instance of LocalFilesystem
|
// filesystem at the given path. If repo is nil, an instance of LocalFilesystem
|
||||||
// is used.
|
// is used.
|
||||||
@ -123,6 +126,10 @@ func DetectLayout(ctx context.Context, repo Filesystem, dir string) (Layout, err
|
|||||||
}
|
}
|
||||||
|
|
||||||
if foundKeyFile && !foundKeysFile {
|
if foundKeyFile && !foundKeysFile {
|
||||||
|
if feature.Flag.Enabled(feature.DeprecateS3LegacyLayout) {
|
||||||
|
return nil, ErrLegacyLayoutFound
|
||||||
|
}
|
||||||
|
|
||||||
debug.Log("found s3 layout at %v", dir)
|
debug.Log("found s3 layout at %v", dir)
|
||||||
return &S3LegacyLayout{
|
return &S3LegacyLayout{
|
||||||
Path: dir,
|
Path: dir,
|
||||||
@ -145,6 +152,10 @@ func ParseLayout(ctx context.Context, repo Filesystem, layout, defaultLayout, pa
|
|||||||
Join: repo.Join,
|
Join: repo.Join,
|
||||||
}
|
}
|
||||||
case "s3legacy":
|
case "s3legacy":
|
||||||
|
if feature.Flag.Enabled(feature.DeprecateS3LegacyLayout) {
|
||||||
|
return nil, ErrLegacyLayoutFound
|
||||||
|
}
|
||||||
|
|
||||||
l = &S3LegacyLayout{
|
l = &S3LegacyLayout{
|
||||||
Path: path,
|
Path: path,
|
||||||
Join: repo.Join,
|
Join: repo.Join,
|
||||||
|
@ -10,6 +10,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/restic/restic/internal/backend"
|
"github.com/restic/restic/internal/backend"
|
||||||
|
"github.com/restic/restic/internal/feature"
|
||||||
rtest "github.com/restic/restic/internal/test"
|
rtest "github.com/restic/restic/internal/test"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -352,6 +353,7 @@ func TestS3LegacyLayout(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestDetectLayout(t *testing.T) {
|
func TestDetectLayout(t *testing.T) {
|
||||||
|
defer feature.TestSetFlag(t, feature.Flag, feature.DeprecateS3LegacyLayout, false)()
|
||||||
path := rtest.TempDir(t)
|
path := rtest.TempDir(t)
|
||||||
|
|
||||||
var tests = []struct {
|
var tests = []struct {
|
||||||
@ -389,6 +391,7 @@ func TestDetectLayout(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestParseLayout(t *testing.T) {
|
func TestParseLayout(t *testing.T) {
|
||||||
|
defer feature.TestSetFlag(t, feature.Flag, feature.DeprecateS3LegacyLayout, false)()
|
||||||
path := rtest.TempDir(t)
|
path := rtest.TempDir(t)
|
||||||
|
|
||||||
var tests = []struct {
|
var tests = []struct {
|
||||||
|
@ -10,7 +10,7 @@ import (
|
|||||||
// Config holds all information needed to open a local repository.
|
// Config holds all information needed to open a local repository.
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Path string
|
Path string
|
||||||
Layout string `option:"layout" help:"use this backend directory layout (default: auto-detect)"`
|
Layout string `option:"layout" help:"use this backend directory layout (default: auto-detect) (deprecated)"`
|
||||||
|
|
||||||
Connections uint `option:"connections" help:"set a limit for the number of concurrent operations (default: 2)"`
|
Connections uint `option:"connections" help:"set a limit for the number of concurrent operations (default: 2)"`
|
||||||
}
|
}
|
||||||
|
@ -6,10 +6,12 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/restic/restic/internal/backend"
|
"github.com/restic/restic/internal/backend"
|
||||||
|
"github.com/restic/restic/internal/feature"
|
||||||
rtest "github.com/restic/restic/internal/test"
|
rtest "github.com/restic/restic/internal/test"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestLayout(t *testing.T) {
|
func TestLayout(t *testing.T) {
|
||||||
|
defer feature.TestSetFlag(t, feature.Flag, feature.DeprecateS3LegacyLayout, false)()
|
||||||
path := rtest.TempDir(t)
|
path := rtest.TempDir(t)
|
||||||
|
|
||||||
var tests = []struct {
|
var tests = []struct {
|
||||||
|
@ -20,7 +20,7 @@ type Config struct {
|
|||||||
Secret options.SecretString
|
Secret options.SecretString
|
||||||
Bucket string
|
Bucket string
|
||||||
Prefix string
|
Prefix string
|
||||||
Layout string `option:"layout" help:"use this backend layout (default: auto-detect)"`
|
Layout string `option:"layout" help:"use this backend layout (default: auto-detect) (deprecated)"`
|
||||||
StorageClass string `option:"storage-class" help:"set S3 storage class (STANDARD, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING or REDUCED_REDUNDANCY)"`
|
StorageClass string `option:"storage-class" help:"set S3 storage class (STANDARD, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING or REDUCED_REDUNDANCY)"`
|
||||||
|
|
||||||
Connections uint `option:"connections" help:"set a limit for the number of concurrent connections (default: 5)"`
|
Connections uint `option:"connections" help:"set a limit for the number of concurrent connections (default: 5)"`
|
||||||
|
@ -13,7 +13,7 @@ import (
|
|||||||
type Config struct {
|
type Config struct {
|
||||||
User, Host, Port, Path string
|
User, Host, Port, Path string
|
||||||
|
|
||||||
Layout string `option:"layout" help:"use this backend directory layout (default: auto-detect)"`
|
Layout string `option:"layout" help:"use this backend directory layout (default: auto-detect) (deprecated)"`
|
||||||
Command string `option:"command" help:"specify command to create sftp connection"`
|
Command string `option:"command" help:"specify command to create sftp connection"`
|
||||||
Args string `option:"args" help:"specify arguments for ssh"`
|
Args string `option:"args" help:"specify arguments for ssh"`
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ import (
|
|||||||
|
|
||||||
"github.com/restic/restic/internal/backend"
|
"github.com/restic/restic/internal/backend"
|
||||||
"github.com/restic/restic/internal/backend/sftp"
|
"github.com/restic/restic/internal/backend/sftp"
|
||||||
|
"github.com/restic/restic/internal/feature"
|
||||||
rtest "github.com/restic/restic/internal/test"
|
rtest "github.com/restic/restic/internal/test"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -16,6 +17,7 @@ func TestLayout(t *testing.T) {
|
|||||||
t.Skip("sftp server binary not available")
|
t.Skip("sftp server binary not available")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
defer feature.TestSetFlag(t, feature.Flag, feature.DeprecateS3LegacyLayout, false)()
|
||||||
path := rtest.TempDir(t)
|
path := rtest.TempDir(t)
|
||||||
|
|
||||||
var tests = []struct {
|
var tests = []struct {
|
||||||
|
@ -6,12 +6,14 @@ var Flag = New()
|
|||||||
// flag names are written in kebab-case
|
// flag names are written in kebab-case
|
||||||
const (
|
const (
|
||||||
DeprecateLegacyIndex FlagName = "deprecate-legacy-index"
|
DeprecateLegacyIndex FlagName = "deprecate-legacy-index"
|
||||||
|
DeprecateS3LegacyLayout FlagName = "deprecate-s3-legacy-layout"
|
||||||
DeviceIDForHardlinks FlagName = "device-id-for-hardlinks"
|
DeviceIDForHardlinks FlagName = "device-id-for-hardlinks"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Flag.SetFlags(map[FlagName]FlagDesc{
|
Flag.SetFlags(map[FlagName]FlagDesc{
|
||||||
DeprecateLegacyIndex: {Type: Beta, Description: "disable support for index format used by restic 0.1.0. Use `restic repair index` to update the index if necessary."},
|
DeprecateLegacyIndex: {Type: Beta, Description: "disable support for index format used by restic 0.1.0. Use `restic repair index` to update the index if necessary."},
|
||||||
|
DeprecateS3LegacyLayout: {Type: Beta, Description: "disable support for S3 legacy layout used up to restic 0.7.0. Use `RESTIC_FEATURES=deprecate-s3-legacy-layout=false restic migrate s3_layout` to migrate your S3 repository if necessary."},
|
||||||
DeviceIDForHardlinks: {Type: Alpha, Description: "store deviceID only for hardlinks to reduce metadata changes for example when using btrfs subvolumes. Will be removed in a future restic version after repository format 3 is available"},
|
DeviceIDForHardlinks: {Type: Alpha, Description: "store deviceID only for hardlinks to reduce metadata changes for example when using btrfs subvolumes. Will be removed in a future restic version after repository format 3 is available"},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user