mirror of
https://github.com/octoleo/restic.git
synced 2024-11-26 06:46:34 +00:00
local/sftp: move limiter setup into backend
This commit is contained in:
parent
7d12c29286
commit
9aa9e0d1ec
@ -610,11 +610,6 @@ func open(ctx context.Context, s string, gopts GlobalOptions, opts options.Optio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if loc.Scheme == "local" || loc.Scheme == "sftp" {
|
|
||||||
// wrap the backend in a LimitBackend so that the throughput is limited
|
|
||||||
be = limiter.LimitBackend(be, lim)
|
|
||||||
}
|
|
||||||
|
|
||||||
// check if config is there
|
// check if config is there
|
||||||
fi, err := be.Stat(ctx, restic.Handle{Type: restic.ConfigFile})
|
fi, err := be.Stat(ctx, restic.Handle{Type: restic.ConfigFile})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -7,6 +7,21 @@ import (
|
|||||||
"github.com/restic/restic/internal/restic"
|
"github.com/restic/restic/internal/restic"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func WrapBackendConstructor[B restic.Backend, C any](constructor func(ctx context.Context, cfg C) (B, error)) func(ctx context.Context, cfg C, lim Limiter) (restic.Backend, error) {
|
||||||
|
return func(ctx context.Context, cfg C, lim Limiter) (restic.Backend, error) {
|
||||||
|
var be restic.Backend
|
||||||
|
be, err := constructor(ctx, cfg)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if lim != nil {
|
||||||
|
be = LimitBackend(be, lim)
|
||||||
|
}
|
||||||
|
return be, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// LimitBackend wraps a Backend and applies rate limiting to Load() and Save()
|
// LimitBackend wraps a Backend and applies rate limiting to Load() and Save()
|
||||||
// calls on the backend.
|
// calls on the backend.
|
||||||
func LimitBackend(be restic.Backend, l Limiter) restic.Backend {
|
func LimitBackend(be restic.Backend, l Limiter) restic.Backend {
|
||||||
|
@ -31,11 +31,7 @@ type Local struct {
|
|||||||
var _ restic.Backend = &Local{}
|
var _ restic.Backend = &Local{}
|
||||||
|
|
||||||
func NewFactory() location.Factory {
|
func NewFactory() location.Factory {
|
||||||
return location.NewLimitedBackendFactory(ParseConfig, location.NoPassword, func(ctx context.Context, cfg Config, _ limiter.Limiter) (*Local, error) {
|
return location.NewLimitedBackendFactory(ParseConfig, location.NoPassword, limiter.WrapBackendConstructor(Create), limiter.WrapBackendConstructor(Open))
|
||||||
return Create(ctx, cfg)
|
|
||||||
}, func(ctx context.Context, cfg Config, _ limiter.Limiter) (*Local, error) {
|
|
||||||
return Open(ctx, cfg)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultLayout = "default"
|
const defaultLayout = "default"
|
||||||
|
@ -44,11 +44,7 @@ type SFTP struct {
|
|||||||
var _ restic.Backend = &SFTP{}
|
var _ restic.Backend = &SFTP{}
|
||||||
|
|
||||||
func NewFactory() location.Factory {
|
func NewFactory() location.Factory {
|
||||||
return location.NewLimitedBackendFactory(ParseConfig, location.NoPassword, func(ctx context.Context, cfg Config, _ limiter.Limiter) (*SFTP, error) {
|
return location.NewLimitedBackendFactory(ParseConfig, location.NoPassword, limiter.WrapBackendConstructor(Create), limiter.WrapBackendConstructor(Open))
|
||||||
return Create(ctx, cfg)
|
|
||||||
}, func(ctx context.Context, cfg Config, _ limiter.Limiter) (*SFTP, error) {
|
|
||||||
return Open(ctx, cfg)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultLayout = "default"
|
const defaultLayout = "default"
|
||||||
|
Loading…
Reference in New Issue
Block a user